Micro Budgeting app icon

Micro Budgeting

Small-budget planning app for tracking micro expenses and short financial goals.

Get it on Google Play ↗ Source on GitHub ↗

Build status and coverage badges are not shown because this repository does not currently include CI or coverage configuration.

Project Overview

Micro Budgeting is an offline Android app for tracking everyday expenses, setting category budgets, and reviewing monthly spending. It is built for people who want a small personal finance tool without accounts, cloud sync, bank connections, or internet permission.

The app stores data locally, uses SQLCipher-backed Room storage on real devices, and supports passphrase-protected export

Key Features

Architecture Overview

Components And Layers

Data Flow

  1. A user adds an expense, configures a budget, pastes a bank alert, or imports/exports a backup.
  2. Compose UI events call FinanceViewModel methods.
  3. The ViewModel validates input and delegates persistence work to repository interfaces.
  4. Repository implementations write Room entities to the encrypted local database.
  5. Room Flow streams feed updated categories, transactions, and budgets back to the UI.
  6. Backup export serializes local data, encrypts it with a passphrase, and places the encoded payload where the user can copy or save it.

Design Patterns

Tech Stack & Libraries

Layer Technology Version Purpose
Language Kotlin 2.2.10 Android app implementation
Build Android Gradle Plugin 9.1.1 Android build system
UI Jetpack Compose Material 3 Compose BOM 2024.09.00 Declarative UI
Activity AndroidX Activity Compose 1.10.1 Compose activity entry point
Lifecycle AndroidX Lifecycle 2.8.7 ViewModel and lifecycle-aware state
Navigation AndroidX Navigation Compose 2.8.9 Available dependency; current UI uses tabs
Persistence Room 2.7.0 SQLite abstraction and DAO generation
SQLite AndroidX SQLite 2.6.2 SQLite integration
Encryption SQLCipher Android 4.16.0 Encrypted local database storage
Key Storage AndroidX Security Crypto 1.1.0-alpha06 MasterKey and encrypted preferences
JSON Moshi 1.15.2 Backup payload serialization
Networking libs OkHttp / Retrofit 4.10.0 / 2.12.0 Present as dependencies, not used for app networking
Coroutines Kotlinx Coroutines 1.10.2 Background work and Flow collection
Screenshots Roborazzi 1.59.0 Play Store screenshot and feature graphic generation
JVM Android tests Robolectric 4.16.1 Local Android runtime tests
Unit tests JUnit 4.13.2 Test runner and assertions

Configuration

The primary app configuration lives in app/build.gradle.kts:

Release signing is configured in the signingConfigs.release block. Credentials can come from environment variables or from key.properties; keep keystores and passwords out of public repositories.

Theme and brand colors live in:

Gradle restart or sync is required after changing build files, dependency versions, signing settings, or SDK versions.

Usage / Quick Start

Build, Install, And Launch

./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell monkey -p com.michael.microbudgeting 1

Generate A Signed Release Bundle

Set STORE_PASSWORD and KEY_PASSWORD in the shell or key.properties before running Gradle.

export KEYSTORE_PATH=/absolute/path/to/my-upload-key.jks
export KEY_ALIAS='upload'
./gradlew :app:bundleRelease

The release bundle is written to:

app/build/outputs/bundle/release/app-release.aab

Regenerate Play Store Assets

./gradlew generatePlayStoreAssets

Generated assets are written to:


API Reference

Not applicable. Micro Budgeting is a local Android application and does not expose an HTTP API, SDK, command-line API, or public service endpoint.

Testing

JVM And Robolectric Tests

./gradlew :app:testDebugUnitTest

Test locations:

Naming convention: JVM and Robolectric tests use *Test.kt. Play Store screenshot tests are marked with the PlayStoreScreenshotTests JUnit category and are included when screenshot generation is requested.

Instrumented Tests

./gradlew :app:connectedDebugAndroidTest

Instrumented tests live in app/src/androidTest/.

Screenshot And Store Asset Tests

./gradlew generatePlayStoreAssets

Coverage

Not configured. No JaCoCo, Kover, or hosted coverage report is present in this repository.

Deployment

Debug APK

./gradlew :app:assembleDebug

Output:

app/build/outputs/apk/debug/app-debug.apk

Release AAB For Google Play

./gradlew :app:bundleRelease

Output:

app/build/outputs/bundle/release/app-release.aab

Before uploading to Play Console, confirm:

Docker And Cloud

Not applicable. This repository builds a native Android app and has no Dockerfile, server process, cloud deployment target, or backend health endpoint.

Health Check

Not applicable for a server endpoint. For app health, run tests, install the APK on a test device, and verify that the app launches and can add an expense, parse pasted alert text, and export/import a backup.

Hiring a senior Android / Flutter engineer?

I architect and ship production mobile software — Kotlin, Jetpack Compose, Flutter — for robotics, EV infrastructure, fintech, and real-time systems. Open to remote roles in Europe and the US.

Get in touch →