Expense Buddy: Local-first expense tracking with GitHub sync

Published: (January 17, 2026 at 10:37 PM EST)
3 min read
Source: Dev.to

Source: Dev.to

Overview

I’ve tried a bunch of expense trackers over the years and kept running into the same problems: slow flows, cluttered screens, and a nagging feeling that I was handing over more data than I should. So I built my own.

Expense Buddy is a privacy‑first, local‑first expense tracker that stays out of your way. It’s built with React Native (Expo), keeps everything on‑device by default, and offers optional GitHub sync for a personal backup you control.

Key Features

  • Local‑first by default – your data stays on the device.
  • Private by design – no analytics, ads, or data selling.
  • Fast on large datasets – lightweight UI with virtualized lists.
  • Optional GitHub sync – keep everything in sync across devices.
  • Daily expense tracking with category and payment‑method tags.
  • Full history view for editing past entries.
  • Incremental, differential, and batched commits for GitHub sync.
  • Deep analytics: category & payment‑method breakdowns, instrument‑level splits, and spending trend charts.
  • Custom categories with colors and icons.
  • Saved payment instruments (cards and UPI IDs).
  • In‑app “What’s New” update notes.
  • Issue reporting directly from Settings.
  • Light and dark mode with theme‑aware styling.

Dashboard

The dashboard serves as a “daily check‑in” screen, giving a quick view of recent spending and a simple 7‑day trend. The graph is tappable, allowing you to jump straight into the entries for a specific day.

Adding an Expense

Adding an expense is intentionally simple—a one‑screen flow with quick category and payment‑method picks so you can log something in a few seconds and move on.

Analytics

The analytics tab shows where money goes by:

  • Category
  • Payment method
  • Saved instrument

You can also view spending trends and compare multiple time windows (e.g., “this week” vs. “the last 3 months”) without leaving the screen.

History

The history view lets you browse past entries, open any expense, and fix it in place—no separate edit mode or hunting required.

Settings

Settings are deliberately straightforward:

  • Set a default payment method.
  • Add or edit custom categories (the app ships with 8 defaults).
  • Manage saved payment instruments for deeper analytics.
  • Enable GitHub sync to keep everything in sync across devices.
  • Choose auto‑sync on change or on app launch.

GitHub Sync (Optional)

Designed to be safe, predictable, and fully optional:

  • Daily CSV files – expenses are stored as expenses-YYYY-MM-DD.csv in your repo.
  • Merge‑first workflow – fetch → merge → push, avoiding accidental data loss.
  • Conflict handling – timestamp‑based resolution; true conflict prompts only when needed.
  • Differential uploads – only changed files are uploaded, batched into a single commit.
  • Settings sync – categories and saved instruments can be synced via settings.json.

Performance

I’m allergic to janky lists, so performance was a first‑class goal. Virtualized lists, memoized components, and a lightweight state layer keep things snappy even with long histories. The UI stays minimal so logging an expense takes seconds, not minutes.

Availability

  • No required external accounts to use the app.
  • GitHub sync is opt‑in and stores files in your own repository (daily CSVs).
  • No selling of data.

Expense Buddy is currently in internal testing on Google Play. To get access, DM @sudokaii on X (Twitter) or send an email.

Back to Blog

Related posts

Read more »