← Back to Projects
mobile app

InSpend

An offline-first expense tracker for Android. Log spending, organize it by category, set monthly budgets, and review your history, with everything stored privately on your device.

Flutter Dart SQLite sqflite Material Design 3
⬇ Download APK Android · v1.0 · 50 MB

When installing, Android may ask you to allow "Install unknown apps" for your browser. This is normal for apps shared outside the Play Store.

01 overview

InSpend is a personal expense-tracking app built with Flutter and Dart. It lets users record daily expenses, sort them into categories, set a budget for each month, and look back through monthly summaries. All data lives in a local SQLite database on the phone, so there is no account to create, no server to depend on, and no internet connection needed to keep track of your money.

02 screenshots
03 key features
04 technical highlights

Relational data on-device. Expenses, categories, and monthly budgets are modeled as three SQLite tables. Expenses reference categories through a foreign key, and a unique month and year constraint on budgets prevents duplicate entries for the same period.

Budget logic with carry-forward. Budgets are stored per month and year, and when a new month has no budget configured the app can carry the previous month's budget forward. Progress and threshold warnings are computed from the month's actual spending totals.

Local receipt pipeline. A selected receipt image is processed and compressed before being saved to the app's documents directory. Only the file path is stored in SQLite, which keeps the database light while the images stay private to the app.

Layered architecture. Models, the database layer, services, screens, and settings controllers are kept separate, so database operations stay out of the UI code and features like currency and theme selection are shared consistently across screens.

Persistent preferences. Theme, currency, and onboarding state are saved with Shared Preferences, so the app restores the user's choices on every launch without any backend.

05 tech stack
Flutter Dart SQLite (sqflite) Shared Preferences Path Provider Image Picker image package URL Launcher Material Design 3 VS Code