Your money in the terminal: coinpay finances
Every number about the money was in a different place. Card volume in one dashboard, crypto payments in another, the bank balance in a bank app, and the answer to "what did we actually keep" nowhere at all. So coinpay finances puts all of it on one screen, in the terminal, updating while you watch.
It ships today in @profullstack/coinpay 0.9.0.
Seven screens
Overview is the one you leave open. Gross volume split into crypto and cards, commission paid, processor fees, refunds, and net earnings, next to the bank position and cashflow. Invoices outstanding and overdue, escrow held, payouts pending. A graph of volume against commission by day, and a live feed.
Bank & Cards lists every account linked through SimpleFIN or Plaid with its balance, what each institution is owed, and when the feed last synced.
Ledger is the transactions with categories and a spend breakdown.
Crypto and Cards each show their payments with fee, net and status.
Invoices & Escrow shows what is outstanding, what is overdue, and what settled.
Debt & Income is the one that stings. Debt against income over a rolling six months: debt to income, debt service ratio, months of cover, payoff months and the date you clear, per account debt shares, detected recurring charges, and a business versus personal split.
Two decisions worth explaining
The debt view uses a fixed six month lookback instead of whatever window the dashboard is set to. Recurring detection has to see a charge three times before it can name a cadence, so a 30 day window finds nothing and reports "no recurring obligations". That reads as a fact about your finances when it is only a fact about the window. Six months settles monthly and quarterly charges.
Transfers and card payments are netted out of both income and spending. A feed holding a checking account and the card that account pays would otherwise count every card payment twice, once as money out of checking and once as money into the card. The gross totals are kept alongside so the netting is auditable rather than magic.
Live, not polled into uselessness
The dashboard refreshes on a timer and subscribes to the payments event stream, so a crypto payment appears the moment it is detected rather than on the next tick.
Bank sync is deliberately a keypress. The bank bridge allows roughly 24 pulls a day, so a screen that synced on every render would exhaust the budget before lunch. Press s when you want fresh balances.
Try it
npm install -g @profullstack/coinpay
coinpay login
coinpay finances
r refreshes, s syncs the bank, w cycles the window across 7, 30, 90 and 365 days, p pauses, ? shows help.
For scripts and for Node older than 22.6 there are plain text equivalents: coinpay finances summary, accounts, ledger, connections and sync, each with --json.
Bank data needs the merchant session from coinpay login. Business API keys are refused there on purpose: a key issued to a business for taking payments should not carry an implicit grant over the owner's bank accounts.
Built on hqtui, which is zero dependency and does the drawing.
Top comments (0)