尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A personal productivity app for credit card perks.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A personal credit card perks and benefits tracker. Track monthly credits, annual travel benefits, quarterly rewards, and card-year ROI across all your premium cards — with cloud sync, snooze, streak tracking, and fee-coverage analytics.查看完整 README ↗A personal credit card perks and benefits tracker. Track monthly credits, annual travel benefits, quarterly rewards, and card-year ROI across all your premium cards — with cloud sync, snooze, streak tracking, and fee-coverage analytics.
Live at: perks.hueyventures.org
send-weekly-digest) using Resend. Toggle in Settings → Notificationssend-push) on daily cron (requires VAPID keys + migration — see KNOWLEDGE.md)effective fee = annual fee − card-year captured
Where card-year captured = sum of all benefit amounts marked used across all past and current periods in the 12-month card year (benefit start month through anniversary month − 1).
months elapsed = (current abs month) − (card year start abs month) + 1, clamped 1–12
months remaining = 12 − months elapsed
projected repeating = (repeating captured / months elapsed) × months remaining
projected = one-time captured + repeating captured + projected repeating
repeating = monthly + quarterly benefits; one-time = annual, semi-annual, etc.
Grade is based on projected / annual fee:
| Grade | Threshold |
|---|---|
| A | ≥ 100% |
| B | ≥ 80% |
| C | ≥ 50% |
| D | < 50% |
A card year starts on the anniversary month/day. If today is before this year's anniversary date, the year started in the previous calendar year; if on or after, it started this calendar year.
Snoozed benefits are excluded from: card-year captured, monthly available, year-end projection, ROI grade, priority queue, and all-cards summary. The snooze state syncs to Supabase so it persists across devices.
| Card | Key |
|---|---|
| Amex Platinum | platinum |
| Amex Gold | gold |
| Amex Green | green |
| Chase Sapphire Reserve | csr |
| Chase Sapphire Preferred | csp |
| Capital One Venture X | cap1_venture_x |
| Hilton Honors Aspire | ah |
| Marriott Bonvoy Brilliant | amb |
| Marriott Bonvoy Bevy | mbb |
| World of Hyatt | uq (note: uses uq key) |
| United Quest | uq |
| United Club Infinite | uc |
| Citi Strata Premier | csp2 |
| WF Autograph Journey | wfaj |
| Aeroplan Reserve | adr |
| Aeroplan | adp |
| Venture X Business | vxb |
| JetBlue Mastercard Reserve | jmr |
| US Bank Altitude Reserve | usbar |
| Layer | Tech |
|---|---|
| Frontend | Vanilla JS ES modules / HTML / CSS — no framework, no build step |
| Auth + Sync | Supabase (email/password auth, RLS, cloud data sync) |
| Hosting | Vercel with custom domain (perks.hueyventures.org) |
| Fonts | Inter + JetBrains Mono (Google Fonts) |
index.html — app shell, modals, PWA meta
css/styles.css — all styles (dark + light mode, responsive, landscape)
js/
cards.js — card definitions: sections, benefits, amounts, cadences
state.js — shared state object, Supabase client, constants (CY, CM, CD)
storage.js — localStorage + Supabase sync; custom amounts, partial use,
notes, credited, skipped, snoozed, fee overrides
periods.js — period math: card year start, period generation, isPCurrent,
calcStats, projections, ROI grade, streaks
badges.js — achievement badge definitions (100+ badges, 5 tiers),
check/earn/persist/backfill logic, TIER_COLORS
views.js — all render functions (renderCurrent, renderROI, renderDigest,
renderNetValue, renderFeeOptimizer, renderCardSimulator, …)
main.js — auth flow, event handlers, navigation, modals, confetti,
renderBadgesView, email digest toggle, push subscribe
manifest.json — PWA manifest
sw.js — service worker (offline cache, currently v35)
supabase/
functions/send-weekly-digest/ — weekly email digest (Resend)
functions/send-push/ — web push notifications (web-push npm)
digest_migration.sql — adds digest_cache + digest_enabled to user_profiles
push_migration.sql — creates perks_push_subscriptions table
cron_schedule.sql — pg_cron for weekly digest
push_cron.sql — pg_cron for daily push at 16:00 UTC
All user data is stored in Supabase (tracker_data table) as a single JSON blob per user, merged with local localStorage on load. The payload includes:
[cardKey] — benefit check-off state (benefitId__periodKey: true/false)_customAmounts — per-benefit dollar overrides_partial — partial credit amounts_notes — period notes_credited — statement credit posted flags_skipped — period-level skips_snoozed — benefit-level snooze-until months (cardKey__benefitId: 'YYYY-MM')_feeOverrides — custom fee month/day per cardThe Supabase anon key is safe to expose in frontend code — RLS policies restrict each row to its owner.
Do not commit a Supabase service role key.
No build step required — it's plain ES modules. Serve from any static file server:
npx serve .
# or
python3 -m http.server 8080
file:// URLs won't work for ES modules. Supabase auth requires the origin to be whitelisted in your Supabase project under Authentication → URL Configuration.