Skip to content

Releases: arangutambo/finance-tracker

0.8.0

Choose a tag to compare

@arangutambo arangutambo released this 12 Aug 13:28

Bills know which cycles a price change actually applies to.

  • Fixed: a scheduled price change was ignored by every projection. A bill repricing on
    15 Aug whose next payment is not until 8 Oct was still shown, totalled, and projected at
    its old price — the new amount only took effect once the change date passed, regardless
    of whether any payment remained at the old price. Per-month/per-year totals, the runway
    target and "due next 30 days" now price each cycle at what will actually be charged.
    Logging is deliberately unchanged: Log now and auto-log still use today's price, since
    a payment made today is charged today's price.
  • Fixed: a bill with an End Date or Payments Left was projected past its own end in the
    runway and due-within windows.
  • Upcoming-payments preview in the edit-bill dialog. The next eight cycles are laid out
    with the price each one will be charged at, the first repriced cycle highlighted, and a
    plain-language summary ("3 more payments at $89.00, then $66.50 from 10 Nov 2026"). It
    updates as you type, so a change date set a few days either side of a due date shows its
    consequences before you save.
  • Payment calendar in the recurring-payments block: a month grid of when bills actually
    land, built like the trip planner's planned-expenses calendar — dots per bill, daily totals,
    click a day for the detail. Overdue, normal and repriced payments are dotted differently.
    Weeks with nothing due are skipped. 1 month / 3 months / 12 months buttons switch the
    horizon for the session, Settings → Dashboard → Payment calendar range sets the default,
    and months: in the block config pins it per note.
  • The 12-month range gets its own compact view. A year of week grids is 52 stacked rows —
    the same information, unreadable. At twelve months the calendar switches to a month-per-row
    heat grid: one line per month, one small cell per day-of-month, shaded in four bands by that
    day's total, with the month's total down the right-hand side. Because bills recur on the same
    day each month, the vertical stripes are the pattern — the 9th and the 14th being heavy
    every month reads in one glance. Repriced and overdue days keep their own colour, and clicking
    any cell opens the same day detail.
  • Fixed: skipping a cycle could invent a bill called "Skipped This Cycle". When a bill's
    tag carried no item name, Skip cycle wrote a bare #log/spending/subscriptions/monthly
    line, and the next parse — having no name to go on — named a bill after the marker's own
    note text. Skipping that wrote another nameless line, so the ghost renewed itself every
    cycle. A $0 line is now only ever a skip marker for a bill that already exists, and the
    skip line always names its bill.
  • The bill row now leads with what the next payment costs, and says how many cycles remain
    at the old price rather than only naming the change date.

Two new capture methods, and the ability to run them all at once.

  • Batched queue. obsidian://finance-capture?lines=… accepts a whole queue of
    transactions in one open, so an Apple Pay automation can accumulate spending on the phone
    all day and flush it with a single app switch instead of foregrounding Obsidian on every
    tap. Each line is parsed independently — one bad line lands in Inbox/_failed/ with the
    reason and never costs you the rest of the batch.
  • GitHub gist capture. The phone appends a capture line to a private gist and the plugin
    polls it, logs what's waiting, and clears it. This is the only method that captures without
    opening Obsidian and works on an Obsidian Sync vault — and the only one that works from an
    Apple Watch. The drain re-reads before clearing, so a transaction added mid-sync is
    preserved; if the gist was rewritten underneath it, it is left alone and says so rather than
    destroying captures.
  • Capture methods can be switched on and off individually (Settings → Capture methods) and
    are designed to run together. Quick add and hand-typed bullets always work and have no toggle.
  • Cross-method duplicate detection. The same purchase arriving by two different methods is
    logged once. Detection compares amount + date + merchant, but only ever across different
    methods or source= values — so two identical coffees down the same pipe are still two
    entries, while one Coles charge seen by both the ANZ automation and the Wise sync is one.
    Configurable as skip / warn / off, with a duplicate window (1 day by default) for feeds that
    settle late. Quick add is exempt: it has its own pre-submit warning, so pressing the button
    always logs.
  • Overlap report. Settings shows which pairs of capture methods have actually been logging
    the same transactions, with a Check capture methods for overlap command for the detail —
    measured from what happened rather than guessed from what each Shortcut is meant to cover.
  • Sync capture gist now command.
  • README documents both new methods with Shortcut recipes, and adds an (explicitly untested)
    Android section covering Tasker / MacroDroid / HTTP Shortcuts equivalents.

0.7.0

Choose a tag to compare

@arangutambo arangutambo released this 30 Jul 03:17

Run "Repair daily note totals" once after upgrading.

Fixed: daily-note totals could be wrong

The running total written onto the #log/spending root line counted numbers appearing inside a transaction's own merchant or note child lines — so Shell Coorparoo 1234 added 1234 to the total, and 7-Eleven added 11.

Dashboards, budgets and every chart were always correct (they only parse tagged entry lines); the wrong number was the one written into the note. Totals now heal whenever a note is opened, and the new Repair daily note totals command fixes an entire backlog in one pass.

Runway replaces the bill reserve

The bill reserve was an envelope you funded and drew down. Runway is simpler: a read-only figure answering "how much do I need available to be safe for the next month?", computed by walking your actual bill schedule.

Keep $395.27 available for the next 1 month
Recurring bills only, between today and 2026-08-29 · 11 bills due

Pick a period (1 week to 6 months) and whether usual spending counts, both in Settings → Runway. It shows the total, per-week and per-day breakdowns, and every bill making it up. No contributions, no balance, no bookkeeping.

A $900 annual renewal is worth nothing to the figure while it is eleven months away, and worth all $900 the moment it enters the window — because that is the month you need the money.

Existing #log/income/billreserve bullets are left alone and still count as transfers rather than income.

Bills that stop on their own

Give a recurring bill an End Date or Payments Left and it retires itself — for fixed-term contracts and instalment plans. It moves to Archived labelled ended 2027-03-01 or all payments made rather than paused, and Restart clears the terms.

Push a week moves just the next due date, leaving the cadence alone.

Foreign currency in quick add

58 USD : 83.64 obsidian sync #subscriptions/yearly/obsidian-sync

Records what you were charged and what it cost, with no stored rate. The code can go either side of the number and the separator is optional. The preview shows the implied rate so you can check you typed it right. Give only the foreign amount and it says so rather than guessing.

Quick add also warns when the same amount and merchant is already logged that day, and there is now an Add button in the sidebar.

Also fixed

  • The dashboard donut ignored your Default grouping setting and always used full category paths. It also drew three concentric bands whenever any one category had a subcategory, so categories without one had their wedge repeated three times in the same colour. Now two bands, and the outer ring only appears over categories that actually split.
  • Settings migrations are gated on a stored schemaVersion instead of re-running on every load; orphaned keys from old schemas are pruned.

Clearer interface

  • One filled action per row. Log now is primary when a bill is actually due; everything else is a quiet outline. A row with six controls no longer reads as six equal choices.
  • Amounts read like a receipt — separated from the name and set larger.
  • 27 commands became 20. Eight Insert … block commands became one picker that describes each block.
  • Six settings sections instead of nine, with folder paths, note filenames and the merchant map behind Advanced — plus a live status line reporting what the plugin can actually read from your vault, so a wrong folder says so instead of yielding an empty dashboard.
  • User-facing copy settles on trip over "holiday". Tags, frontmatter and block names are unchanged, so nothing in your vault needs editing.

Under the hood

finance-core.js is now the single source of truth, and scripts/mirror-core.js generates main.js's core IIFE from it. npm test fails if the two diverge — the hand-maintained copy had quietly drifted in four places by 0.6.0, including a default that differed between the tested and the shipped code.

Runway and forecast arithmetic works in integer cents. ~250 lines of dead code removed. Tests: 110, up from 81, including a new tests/integrity.test.js covering write→read round trips and total-healing invariants — which is what caught the totals bug.

0.6.0

Choose a tag to compare

@arangutambo arangutambo released this 28 Jul 08:39

New

  • Yearly & quarterly reviewsInsert yearly review / Insert quarterly review compute the period's totals, best/worst month by spend, top spending categories, and a transfers summary once and insert the finished markdown at the cursor — a frozen snapshot, not a live recomputing block.
  • Recurring bills log on the real date they're paid — Log now and Skip cycle log on the date the action actually happened, not the historical due date, but the schedule stays anchored to its own cadence via a new Next Due registry override (advanced from the due date just fulfilled, not from today) — so a late payment never drifts every future due date out by the same amount. Next Due is also directly hand-editable, as a manual escape hatch.
  • "Recurring bills due" sidebar card — stays in the Daily Budget sidebar until each overdue/due bill is actually logged.
  • Bill reserve per-cadence breakdown — weekly bills get a per-week figure; monthly (and longer) cadences get both a per-week and a per-month figure, tracked separately, plus a per-quarter combined total.
  • Variable bills (utilities and the like) — mark a bill Variable and it projects monthly/yearly totals and the bill reserve off the average of its last six payments instead of just the last one; Log now on a variable bill prompts for the actual amount instead of repeating a fixed number that was never going to be right.
  • Bill reserve contributions — a shared envelope you can top up like a savings goal (Contribute to bill reserve command), with a "Saved so far" figure compared against what should already be set aside.

80 tests passing (npm test).

0.5.0

Choose a tag to compare

@arangutambo arangutambo released this 22 Jul 05:44

New

  • Recurring bill lifecycle — pausing a bill now moves it into a collapsed Archived section of the finance-recurring block (click to open), with Resume and a permanent Remove completely — the bill is dropped from consideration for good, even if you log another entry with the same tag later.
  • Edit a recurring bill — manage mode gains an Edit action: correct the amount directly, or schedule a future price change with an exact date (e.g. "this subscription becomes $15.99 on the 1st"). The new amount applies itself automatically once that date arrives.
  • Recurring payments note name is now a setting — asked once during first-time setup, changeable any time in Settings → Recurring payments.
  • Merchant map moved off disk — learned merchant → category associations now live in plugin settings instead of a hand-edited Merchant Map.md note. Existing notes are migrated once, automatically, and then removed. Manage entries at Settings → Merchant map.
  • Donut chart polish — subcategory shades are now ranked by spend (biggest subcategory lightest, smallest darkest) instead of a fixed pattern, and hovering any slice shows its name, amount, and share of the total.
  • README overhaul — a full command reference table, the Apple Shortcuts capture tutorial folded in from its standalone note, and 23 real screenshots covering setup, capture, quick-add, recurring payments, dashboards, goals, splits, and net worth.

Fixed

  • The Recurring Payments note no longer shows up as a selectable holiday budget or savings goal in those pickers.
  • updateRecurringRegistryEntry was silently ignoring amount overrides.
  • Settings → Holiday budgets and → Savings goals shared one unfiltered list, so a plain savings goal (no trip_tag) would visually appear under "Holiday budgets" — each section now only lists its own notes.
  • Quick-add's category/tag autocomplete was inadvertently hiding every subscriptions/... category.
  • Quick-add: Enter now accepts the highlighted autocomplete suggestion (same as Tab) while the popup is open, and only submits the entry once the popup has closed.
  • authorUrl in the manifest pointed at a dead GitHub account; corrected to the actual repo owner.
  • CSS: dropped text-decoration-thickness and color-mix(), neither of which is reliably supported by the older Electron builds this plugin's minAppVersion claims to support.

Infrastructure

  • Added package-lock.json and a build script (no bundler — main.js is authored directly — but it verifies the release files are present).
  • Added a GitHub Actions workflow that generates build-provenance attestations for main.js/manifest.json/styles.css and attaches them to the release.

76 tests passing (npm test).

0.4.0

Choose a tag to compare

@arangutambo arangutambo released this 22 Jul 02:04

New

  • Recurring bill lifecycle — pausing a bill now moves it into a collapsed Archived section of the finance-recurring block (click to open), with Resume and a permanent Remove completely — the bill is dropped from consideration for good, even if you log another entry with the same tag later.
  • Edit a recurring bill — manage mode gains an Edit action: correct the amount directly, or schedule a future price change with an exact date (e.g. "this subscription becomes $15.99 on the 1st"). The new amount applies itself automatically once that date arrives.
  • Recurring payments note name is now a setting — asked once during first-time setup, changeable any time in Settings → Recurring payments.
  • Merchant map moved off disk — learned merchant → category associations now live in plugin settings instead of a hand-edited Merchant Map.md note. Existing notes are migrated once, automatically, and then removed. Manage entries at Settings → Merchant map.
  • Donut chart polish — subcategory shades are now ranked by spend (biggest subcategory lightest, smallest darkest) instead of a fixed pattern, and hovering any slice shows its name, amount, and share of the total.
  • README overhaul — a full command reference table, the Apple Shortcuts capture tutorial folded in from its standalone note, and 23 real screenshots covering setup, capture, quick-add, recurring payments, dashboards, goals, splits, and net worth.

Fixed

  • The Recurring Payments note no longer shows up as a selectable holiday budget or savings goal in those pickers.
  • updateRecurringRegistryEntry was silently ignoring amount overrides.
  • Settings → Holiday budgets and → Savings goals shared one unfiltered list, so a plain savings goal (no trip_tag) would visually appear under "Holiday budgets" — each section now only lists its own notes.
  • Quick-add's category/tag autocomplete was inadvertently hiding every subscriptions/... category.
  • Quick-add: Enter now accepts the highlighted autocomplete suggestion (same as Tab) while the popup is open, and only submits the entry once the popup has closed.
  • authorUrl in the manifest pointed at a dead GitHub account; corrected.
  • Added a lockfile (package-lock.json) for reproducible builds.

76 tests passing (npm test).

0.3.1

Choose a tag to compare

@arangutambo arangutambo released this 21 Jul 09:14
  • improved ReadMe
  • improved quickadd transactions
  • improved subcategory displays
  • improved recurrent transaciton management allowing archiving and better planning

0.3.0

Choose a tag to compare

@arangutambo arangutambo released this 20 Jul 03:11

Everything is still plain, hand-editable markdown — tagged bullets and frontmatter.

New

  • Trip reflection — once a trip's end date has passed (or the note is archived), its holiday-dashboard block automatically becomes a reflection: total and after-trip spend, under/over budget, average per day, biggest and quietest days, a per-category table (total, avg/day, share, biggest single expense with merchant), a spend-by-day chart, and planned vs paid. Force either mode with view: live / view: reflection.
  • First-time setup wizard — opens automatically on a fresh install (or via Run first-time setup): pick your folders and currency, and the starter notes (💸 Budgets, 📊 Finance Dashboard, 🔁 Recurring Payments, 🎯 Goals) are created from templates embedded in the plugin. Never overwrites existing notes.
  • Quick-add autocomplete — suggestions for categories, merchants, and owed= people, derived from what you've actually logged plus your budget table. Arrows cycle, Tab accepts, Esc dismisses, Enter always submits. Accepting a known merchant fills in its remembered category. The hand-maintained Shortcut categories setting is gone.
  • Quick add from the open note — optional setting: opening quick add while a daily note is active pre-fills that note's date.
  • Two-ring category donut — dashboard pies now show major categories on the inner ring and every subcategory on the outer ring as shades of the parent hue, with a nested legend. The sidebar mini pie stays at major categories.
  • Recurring payments managementOpen recurring payments note creates a management page (manage: true block) with per-bill Log now and Skip cycle (logs a $0 entry so the schedule advances without changing the remembered price), a due-next-30-days card, and a Bill reserve section: what should already be set aside for quarterly/yearly bills and the steady per-week amount that keeps every cadence covered.
  • Goal contributionsContribute to savings goal command logs the contribution bullet for you; the new finance-goals block shows every goal envelope with one-tap contribute, and account: <key> reconciles goal balances against a real account's balance snapshot (unallocated / over-allocated).
  • Goal archiving parityArchive completed savings goals joins Archive finished holidays; archive summaries now include a withdrawals table.
  • Compact sidebar — budgets are slim rows (name + spent/limit + thin pace bar); hover or tap a row for the detail. The Today's-entries section was removed.

Fixed

  • Trip-tagged spending no longer counts toward home budgets — it is a withdrawal from the trip's savings goal and lives on the holiday dashboard. Use type: all in finance-query to include it in reports.
  • Mini pie chart crash in the sidebar (SVG class token error).

73 tests passing (npm test).

0.2.1

Choose a tag to compare

@arangutambo arangutambo released this 16 Jul 10:42

Fixes the daily-note folder autodetect taking Journals per-date folder templates (e.g. Journal/Daily/{{date:YYYY}}/{{date:MM}}) literally, which made every dashboard and the sidebar show $0.00. The static folder prefix is now used, and a bad value persisted by 0.2.0 is healed automatically on load.

0.2.0

Choose a tag to compare

@arangutambo arangutambo released this 16 Jul 09:43

Everything is still plain, hand-editable markdown — tagged bullets and frontmatter.

New

  • Recurring payments — tag a bill once with a cadence subtag (#log/spending/subscriptions/monthly/spotify) and the finance-recurring block shows upcoming and overdue bills (one-tap Log now) plus per-month/per-year totals. Optional auto-log on the due day.
  • Unified goals — savings goals and holiday budgets share one frontmatter schema. Any goal with target_amount + due_date shows sinking-fund math (set-aside per week, ahead/behind pace); a holiday is a goal with a trip_tag, dates, and currency. Legacy holiday_tag/savings_goal_* notes still parse.
  • Multiple holidays & archiving — save for several holidays at once (per-note active toggles in settings), and Archive finished holidays freezes each ended trip's savings steps and spending record (during and after the trip) into the note before moving it out of the active set.
  • Split expensessplit=N and owed=Name:$X in quick-add and obsidian://finance-capture; hand-editable #log/owed/<person> child lines; budgets count only your share; finance-splits block, sidebar card, and a Settle up command that logs the repayment as income and marks entries settled.
  • Trip modeStart trip / End trip; captures default to the trip tag and trip currency with conversion through the note's exchange rates; sidebar shows spent-today, trip budget remaining, and safe $/day.
  • Forecastfinance-forecast projects recurring income minus bills minus trailing-90-day discretionary spend (including goal set-asides) forward N months, with a "~$X by date" headline.
  • Net worthSnapshot balances logs - $5,230.00 #log/balance/anz-plus bullets into today's note; networth-dashboard renders the balance trend. No extra files.
  • Query blockfinance-query: filter by category/tag/merchant/date range, group by category/merchant/month, sum or count; views include ranked category tables with percentages, monthly income-vs-expense bars, and a cumulative balance line.
  • Hue-family colours — every chart gives each major category one hue with subcategory shades; pies and legends rank by group with nested subgroups.
  • Daily-note folder and date format auto-detected from the Journals or core Daily notes plugin.

Fixed

  • Child lines (merchant/note/owed) now attach only to their own parent bullet.

68 tests passing (npm test).

0.1.0

Choose a tag to compare

@arangutambo arangutambo released this 15 Jul 03:43

Initial release. Log spending as tags in your daily notes and turn them into pace-aware budget, holiday, and savings dashboards. Capture via Apple Shortcuts or the quick-add modal.