尚未偵測到更新。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.