A fully static web application to track credit card benefits for Amex Platinum and Chase Sapphire Reserve. Import your CSV statements from Amex and Chase to automatically track benefit usage. All data is stored locally in your browser and never sent to any servers.
- π₯ Automatic CSV Import: Import transactions from both Amex and Chase
- π Track Benefits: Monitor all your credit card benefits in one place
- π³ Multi-Card Support: Mix Amex Platinum and Chase Sapphire Reserve benefits
- π Progress Visualization: Visual progress bars showing usage status
- π Multiple Reset Frequencies: Annual, twice-yearly, quarterly, and monthly tracking
- π Enrollment Tracking: Highlight benefits requiring enrollment
- π Historical View: Look back at prior years' benefit usage
- π Hide Benefits: Ignore benefits you don't use
- π Transaction Viewer: Debug which transactions match which benefits
- π Privacy-First: All user data stored locally in your browser
- π€ Vibe Coded: Built with Claude and MiniMax in OpenCode, so enjoy the bugs!
Import your credit card statements to automatically track benefit credits. CSV imports are processed in your browser.
- Open Transactions and select your card.
- Choose Download manually for the bank's export steps, or Use an LLM agent for a copyable prompt.
- If using an agent, click Copy prompt, paste it into an LLM agent with browser and Downloads access, and help with sign-in or MFA if needed.
- Once downloaded, drag the CSV from Downloads into the app, or use Choose File.
The prompts include the export settings for Chase or Amex, request all available posted transaction history, and tell the agent to save one CSV in Downloads for you to upload manually. Use View prompt to read or copy the instructions yourself. Repeat for your other card.
Amounts below reflect the 2026 policies. The app uses dated definitions for historical views and shows unavailable periods in gray. Hover over a period for its allowance, effective dates, and credit details.
| Benefit | Annual Value | Reset Frequency | Enrollment Required |
|---|---|---|---|
| Hotel | $600 | Twice-yearly ($300 each) | No |
| Uber One | $120 | Annual | No |
| Airline Fee | $200 | Annual | Yes |
| CLEAR Plus | $219 from July 1, 2026 | Annual, previously $209 | No |
| Resy | $400 | Quarterly ($100 each) | Yes |
| Digital Entertainment | $300 | Monthly ($25/mo) | Yes |
| lululemon | $300 | Quarterly ($75 each) | Yes |
| Walmart+ | $155.40 plus applicable tax | Monthly ($12.95 plus tax) | No |
| Saks Fifth Avenue | $50 in 2026 | Ended June 30, 2026 | Yes |
| Oura Ring | $200 | Annual | Yes |
| Equinox | $300 | Annual | Yes |
| Benefit | Annual Value | Reset Frequency | Enrollment Required |
|---|---|---|---|
| Travel | $300 | Account anniversary | No |
| The Edit Hotel | $500 | Annual, up to $250 per qualifying stay | No |
| Select Hotels | $250 in 2026 | Available only during 2026 | No |
| Exclusive Tables Dining | $300 | Twice-yearly ($150 each) | No |
| DoorDash | $300 | Monthly ($25/mo) | Yes |
| Lyft | $120 | Monthly ($10/mo) | Yes |
| Peloton | $120 | Monthly ($10/mo) | Yes |
| StubHub/viagogo | $300 | Twice-yearly ($150 each) | Yes |
- Still available adds the unused allowances in active periods. Expired allowances and future periods contribute zero. Amounts are based on imported credits, so missing history can overstate availability.
- Completed means at least 50% of a period's allowance was used. Any unused dollars remain available until the period ends.
- Airline Fee can show an inferred airline from a reimbursement's description or a same-amount airline charge in the preceding 14 days. Detection uses only the selected year's credits and leaves conflicting evidence unresolved. The hint does not confirm the selection in your Amex account.
- Uber Cash is excluded from all calculations. DoorDash and Lyft usage cannot currently be read from a card statement.
- Global Entry/TSA PreCheck retains its four-year eligibility cycle across years, while a reimbursement contributes to used value only in the year received. A covered cycle does not add another annual allowance. Amex's current limits are $120 for Global Entry or up to $85 for TSA PreCheck. Eligibility depends on having the earlier credit in imported history.
- Set the Travel credit reset date shown by Chase in the Travel benefit card. Until that date is provided, the summary shows a
+and leaves the unknown travel allowance out of Still available. - Chase's Manage benefits menu has a 2025 benefit rollout setting. The default is October 26 for existing cardholders who applied before June 23, 2025. Select June 23 for the new-card rollout.
Each benefit in public/benefits.json has a policies array. A policy gives its inclusive startsOn and optional endsOn dates, allowance per reset period, reset frequency, description, and source URLs. A later policy replaces the preceding policy from its start date. Use newCardStartsOn for Chase's alternate rollout date.
Changes within an existing period, such as CLEAR's annual cap increase, preserve credits already used in that period. Set resetOnChange: true when a new policy explicitly opens a separate allowance, as the September 2025 Amex hotel refresh did. Calendar periods remain visible when unavailable and do not count as missed. Chase Travel uses resetBasis: "anniversary" and the reset date stored locally for that account.
The latest definitions were checked on September 6, 2026 against Amex's current terms, the 2025 Amex refresh, and Chase's current terms. Individual policies include their supporting sources.
- Runtime: Bun
- Language: TypeScript
- Frontend: React + Vite
- Styling: Tailwind CSS
- Data Storage:
- Benefit definitions: Static JSON (
/benefits.json) - User data: Browser localStorage
- Benefit definitions: Static JSON (
- Bun installed (version 1.0.0+)
bun installbun dev# Build static files to dist/
bun run build
# Preview production build locally
bun run preview# Run calculation tests
bun test src/lib
# Run E2E tests
bun run test:e2e
# Install Playwright browsers (first time only)
bun run test:e2e:install# Run oxlint
bun run lint
# Run with all plugins
bun run checkThis is a fully static app - no server required. To deploy:
- Build:
bun run build - Upload contents of
dist/to any static host:- GitHub Pages
- Netlify
- Vercel
- AWS S3 + CloudFront
- Any web server
- Benefit definitions: Stored in
public/benefits.json(static, version-controlled) - User data: Stored in browser
localStorageunder keyuse-your-benefits- Imported transactions
- Enrollment status
- Ignored/hidden benefits
- Account reset dates and rollout settings
MIT
