Skip to content

saadkhalidkhan/FlowFi

Repository files navigation

FlowFi

Play Store branch: App ships as Mizafi (com.saadproductlabs.mizafi) by Saad Product Labs. This GitHub repo name stays FlowFi.

CI Docs License: MIT Version Kotlin minSdk targetSdk Compose

A fast, Material 3 personal finance app that turns data into decisions — track spending, get behavioral guidance, and progress toward savings goals. Built with Kotlin, Jetpack Compose, Room, and MVVM.

Demo

FlowFi app demo

Also available as flowfidemo.webm (higher quality)

Screenshots

Dashboard Add transaction All transactions

Dashboard · Add / Edit · View All

Features

Transactions

  • Transaction tracking — Record income and expenses with amount, category, date, and notes
  • Edit transactions — Tap any item on the dashboard or list to update it
  • Delete with undo — Swipe to delete on the list; tap Undo on the snackbar to restore
  • List filters — Narrow the full history by month and category
  • Financial dashboard — Monthly balance, income, and expense totals
  • Transaction history — Chronological list with dates

Insights & goals

  • Insight engine — Behavioral guidance such as week-over-week food spending, spending vs your monthly average, and savings rate trends
  • Category analytics — Monthly expense breakdown with percentage bars (Food, Shopping, Bills, and more)
  • Savings goals — Create goals (Emergency fund, Travel, etc.), add funds, and track progress visually
  • Insights hub — Open from the dashboard Guidance card for charts, insights, and goals in one place

Design

  • Material 3 UI — Dynamic color, light/dark themes, edge-to-edge layout

In the app

  1. Dashboard — See this month’s balance and a preview of your top insight; tap Guidance for the full Insights hub
  2. Add / edit — Use + or tap a transaction to record or update spending
  3. View all — Browse history, filter by month or category, swipe to delete (with Undo)
  4. Insights — Review guidance, category charts, and savings goal progress

Installation

Requirements: Android Studio Ladybug or newer, JDK 17+, Android SDK 36

git clone https://github.com/saadkhalidkhan/FlowFi.git
cd FlowFi
./gradlew :app:assembleDebug

Install on a device or emulator:

./gradlew :app:installDebug
adb shell am start -n com.saadproductlabs.mizafi/.MainActivity

Usage examples

Insert a transaction

import com.saadproductlabs.mizafi.data.database.AppDatabase
import com.saadproductlabs.mizafi.data.entity.TransactionEntity
import com.saadproductlabs.mizafi.data.entity.TransactionType
import com.saadproductlabs.mizafi.data.repository.TransactionRepositoryImpl

val repository = TransactionRepositoryImpl(
    AppDatabase.getDatabase(context).transactionDao()
)

repository.insertTransaction(
    TransactionEntity(
        amount = 42.50,
        category = "Food",
        date = System.currentTimeMillis(),
        type = TransactionType.EXPENSE,
        note = "Lunch"
    )
)

Observe totals in a ViewModel

import com.saadproductlabs.mizafi.data.entity.TransactionType
import kotlinx.coroutines.flow.map

repository.getAllTransactions()
    .map { list ->
        val income = list.filter { it.type == TransactionType.INCOME }.sumOf { it.amount }
        val expenses = list.filter { it.type == TransactionType.EXPENSE }.sumOf { it.amount }
        income - expenses // balance
    }

Create a savings goal

import com.saadproductlabs.mizafi.data.entity.SavingsGoalEntity

savingsGoalRepository.insertGoal(
    SavingsGoalEntity(
        name = "Emergency fund",
        targetAmount = 5000.0,
        currentAmount = 250.0
    )
)

Generate behavioral insights

import com.saadproductlabs.mizafi.domain.InsightEngine

val insights = InsightEngine.generate(transactions)
insights.forEach { println(it.message) }

Wire repositories in Application

class MizafiApplication : Application() {
    val database by lazy { AppDatabase.getDatabase(this) }
    val repository by lazy { TransactionRepositoryImpl(database.transactionDao()) }
    val savingsGoalRepository by lazy {
        SavingsGoalRepositoryImpl(database.savingsGoalDao())
    }
}

Documentation

API reference is generated with Dokka:

./gradlew :app:dokkaGeneratePublicationHtml

Output: app/build/dokka/html/

Published docs (GitHub Pages): https://saadkhalidkhan.github.io/FlowFi/

First-time setup: enable Pages under Settings → Pages → Build and deployment → Source: GitHub Actions, or run
gh api -X POST repos/saadkhalidkhan/FlowFi/pages -f build_type=workflow

Project structure

FlowFi/
├── app/
│       └── src/main/java/com/saadproductlabs/mizafi/
│       ├── data/          # Room entities, DAOs, repositories
│       ├── domain/        # InsightEngine, CategoryAnalytics
│       ├── ui/            # Compose screens, theme, navigation
│       └── viewmodel/     # MVVM state and actions
├── docs/
│   ├── images/          # Screenshots
│   └── media/           # Demo video
└── .github/workflows/   # CI and docs

Tech stack

Layer Technology
UI Jetpack Compose, Material 3
Architecture MVVM, Repository pattern
Persistence Room (KSP)
Async Kotlin Coroutines, StateFlow
Navigation Navigation Compose

Development

./gradlew testDebugUnitTest   # Unit tests
./gradlew :app:assembleDebug   # Debug APK

License

This project is licensed under the MIT License.

Copyright (c) 2026 Saad Khalid Khan

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages