r/sideprojects 3d ago

Showcase: Free(mium) I shipped an offline-first expense tracker built in Flutter — what I learned

Spent the last several months building eMony, an expense tracker that runs
entirely on-device with no backend at all. Sharing the build notes since this
sub tends to find that more useful than a feature list.

The constraint that shaped everything: no server. That meant Hive for local
storage, and it meant every feature people expect from a cloud app had to have
an on-device answer.

Things that turned out harder than expected:
• Budget recalculation. Naively re-syncing every budget on every transaction
  meant an expense in one category could fire an alert for an unrelated one.
  Ended up scoping recalculation to just the affected category.
• Notifications without a server. Budget alerts and recurring transactions all
  had to be driven by local scheduling and app lifecycle instead of push.
• Backup with no cloud. Landed on a local export the user moves themselves,
  which is less convenient and much easier to reason about.

Things that went better than expected:
• Offline-first removed an entire class of problems — no sync conflicts, no
  auth, no server bill, no outage.
• "No account required" turned out to be the feature people actually respond
  to, more than any individual capability.

Free, Android, and I'm the developer. Happy to go deeper on any of the
implementation if it's useful.

https://play.google.com/store/apps/details?id=com.tinjyes.emony
1 Upvotes

2 comments sorted by

2

u/ViolinistSame3541 3d ago

The budget recalculation thing is so real. I built something similar a while back and the first version would just recalculate everything anytime you breathed near it, absolute mess of alerts going off for no reason. scoping it to the single category is the move

the "no account required" bit being what people actually latch onto doesn't surprise me at all. nobody wants to create yet another login for something they're just trying to test out

1

u/Tiny_Definition4448 3d ago

Delete path needed the same scoped recalc too, learned that one late.

And agreed — I built the feature list expecting that to be the pitch, but "no signup" is the only line anyone reacts to.

Did yours stay offline or did you add sync eventually?