Skip to content

Repository files navigation

okane (お金)

A keyboard-first viewer/triage tool for Lunch Money — get every transaction categorized fast, see where your money actually goes, and let Claude do the first pass for you.

Built by Raj (with Claude Code). Shared as-is — it's a personal tool, but a genuinely useful one.

What it does

  • Transaction list with vim-style keys — j/k to move, everything reachable without a mouse
  • Fast categorization — fuzzy category picker (c), bulk-categorize every transaction from a payee at once (C), instant digit hotkeys 1-9,0 for your top categories
  • AI first pass — Claude proposes a category for every uncategorized payee; you just approve with y (one) / Y (all from that payee) or reject with n
  • Spending analytics (a) — category × month table for the last 6 months, plus Claude-written plain-English summaries of what was happening each month, plus a "most needs review" list
  • Amazon enrichment — import your Amazon data export and "Amazon $43.90" becomes "cat litter + USB cables", with item-aware category proposals (handles split shipments, digital orders, even foreign-currency orders)
  • Filters/sorts for triage — uncategorized-only (x), heaviest-outflows-first (o), month stepping ([ ]), payee search (/)

Setup (5 minutes)

  1. Get a Lunch Money account — lunchmoney.app (paid, has a free trial; it syncs your bank accounts via Plaid and has a great API). Then create an API token at my.lunchmoney.app/developers.

  2. Run the app:

    git clone https://github.com/rajlego/okane-public && cd okane-public
    npm install
    cp .env.example .env    # then paste your token into .env
    npm run dev             # → http://localhost:43117

    Leave .env untouched to poke around against Lunch Money's mock server (fake data) first.

    Your token stays in .env (gitignored) and is injected server-side by the Vite dev proxy — it never reaches browser code.

  3. Press s to sync, then just drive with the keyboard. The help line at the top shows every key.

The AI features (optional)

The AI scripts run on your Claude Code subscription via the claude CLI — no API key, no per-call cost. Install Claude Code, log in, then:

node scripts/suggest-categories.mjs   # Claude proposes a category per payee → approve in-app with y/Y/n
node scripts/month-summaries.mjs      # Claude writes what-happened-this-month summaries → shown in the analytics pane (a)

Amazon import (optional, very worth it)

  1. Request your data: amazon.com → Account → Request Your Information → "Your Orders" → confirm via the email they send
  2. When the ZIP arrives (hours–days), extract it to data/amazon/ in this repo (gitignored)
  3. node scripts/amazon-match.mjs — matches your card charges to actual items (exact amounts, split shipments, digital orders, FX for foreign Amazon sites) and upgrades the category proposals to item-level

Keyboard reference

Key Action
↑↓ / jk move
c categorize (fuzzy picker)
C bulk categorize all loaded txns with same payee
y / Y / n approve AI suggestion (one / all from payee) / reject
1-9,0 instant-assign top ten categories
r toggle reviewed
u / x unreviewed-only / uncategorized-only filters
o sort by date ↔ heaviest outflows first
[ / ] step through months
a analytics pane (spend split, summaries, needs-review)
/ payee search
s sync

A note on hosting

This runs locally. If you want to put it on the internet for yourself/others, don't deploy the static build as-is — your Lunch Money token would have to reach the browser. Put an authenticated serverless proxy in front (verify a login, hold the token server-side, forward requests). That's how Raj's hosted instance works.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages