The Rewards Ledger
An editorial daily ledger for travel rewards households — every loyalty currency, cert, credit, and signup bonus tracked across Carl/Rachel/Joint, with weekly Anthropic-generated commentary
Scroll to unlock the vault
What it is
A personal points / miles / certs / credits dashboard for travel-rewards households. Tracks every loyalty currency I hold, what each is worth in USD at current redemption rates, and what's about to expire — written as an editorial daily ledger rather than a spreadsheet.
The brand is The Rewards Ledger. The aesthetic: gold-on-charcoal newspaper, Newsreader serif display, mono numerals via tabular-nums, split-flap animations on the leaderboard.
Seven sections
| Tab | What lives there |
|---|---|
| 💳 Programs | 19 loyalty currencies — airline miles, hotel points, credit-card points. Each row carries owner, status tier, sparkline, and a USD-value estimate. |
| 🎟️ Certificates | Free-night certs (Marriott 35k/50k, IHG anniversary, etc.), free flights, status-bonus rewards. Expiry countdowns. |
| 🎫 Credits | Amex Platinum / Gold / CSR statement credits — Dell, Saks, Walmart+, dining, hotel. Status (open · pending · done) with due dates. |
| 💵 Cash credits | Airline travel-bank dollars, gift cards, hotel travel credits. |
| ✈️ Signup bonuses | Four-lane kanban — Ready to apply · Coming soon · Just applied · Waiting. Tracks 5/24 windows and cooldown periods. |
| 📖 Apply | Curated catalog of cards to research next, with chips linking to NerdWallet, TPG, DoC, MilesTalk, r/churning, 北美華人哩程交流討論. |
| 📜 Activity | The Chronicle — day-over-day diffs from daily snapshots, grouped by month. What changed, when, by how much. |

One app, three perspectives
Every page accepts an ?owner= filter (Carl · Rachel · Joint · All). Snapshots are written per-owner, so each person's portfolio has its own independent history and sparklines.
The pieces I'm proud of
- Title-bar balance ticker — top balances cycle in a looping video at the top of every page
- 3D dashboard tilt on scroll — cards tilt subtly into perspective as you scroll the homepage (watch the embed above)
- Weekly Anthropic-generated commentary — Claude writes a short editorial blurb every Sunday on portfolio movements, cached in Turso
- Veo cinematic section banners — gold-dust, world-map, vault, pocket-watch — generated via Vertex AI and looped masked-edge under each section header
- Split-flap board for the top program leaderboard
- Daily snapshot pipeline writes a row per owner so the Activity Chronicle has something to diff
Stack
- Next.js 16 (App Router, Server Components, Turbopack) on Vercel
- Tailwind v4 editorial design system — Newsreader serif display, Geist sans, gold
#d4a574accent, mono-spaced numbers - Turso (libsql) — SQLite-on-the-edge for primary storage + daily snapshots
- Anthropic API — weekly editorial commentary
- Vertex AI Veo — cinematic loop videos for section banners
- Playwright + ffmpeg — README screenshot + GIF pipeline (auto-blurs
.font-monospans so account numbers never leak into checked-in images) - Basic-auth middleware fronting the entire site
Six core tables
programs · certificates · credits · cash_credits · signup_bonuses · snapshots · commentary — with per-owner composite primary key (snapshot_date, owner) so each person's chronicle is independent.
Why
I was running my entire travel-rewards strategy out of a Google Sheets pivot table. It worked, but it was ugly, slow on mobile, and didn't tell me anything I didn't already know. The Ledger turns the same data into a daily editorial: what changed, what's worth what, what's expiring soon, what's the next move.
It's also a sandbox for the editorial design language — gold-on-charcoal, serif display, mono numerals, masked-edge video banners, split-flap animations — that I'm reusing across other projects.