Skip to content

w1lderr/SpendlyApp

Repository files navigation

frame

📋Overview

Spendly is a research project for the Junior Academy of Sciences of Ukraine (JASU) - a mobile app designed to improve financial literacy and help users track expenses.

By combining gamification, AI-driven insights, and a user-friendly interface, Spendly is positioned as an alternative to standard expense trackers.

📦Download APK

You can download the APK from this link.

❓Why Monobank only?

At the moment, Spendly supports only Monobank. This choice is intentional: Monobank is currently the only bank in the target region that provides a public API accessible to all users.

🏗️Project architecture

Spendly follows a clean, single-module MVVM (Model-View-ViewModel) architecture built entirely with Jetpack Compose.

app/
├── androidUuidGenerator/       # Device-based UUID generation
├── api/                        # HTTP client setup (Digest Auth)
├── data/
│   ├── dto/                    # Data Transfer Objects (API contracts)
│   ├── model/                  # Domain models
│   ├── preferences/            # DataStore preferences
│   └── repo/                   # Repositories (data access layer)
├── di/                         # Koin dependency injection modules
│   ├── AppModule
│   ├── NetworkModule
│   ├── RepositoryModule
│   ├── ViewModelModule
│   ├── UtilModule
│   └── PreferencesModule
├── navigation/                 # Navigation graph & bottom nav
├── service/                    # Firebase Messaging, Speech, WebView
└── ui/
    ├── imageVector/            # Custom SVG icon definitions
    ├── screens/                # One package per screen (Screen + VM + UiState)
    │   ├── Home/
    │   ├── ChatScreen/
    │   ├── Statistics/
    │   ├── Target/
    │   ├── Challenges/
    │   ├── Settings/
    │   └── ...
    └── theme/                  # Material3 theme, colors, typography

Each screen follows the pattern: Screen.kt + ViewModel.kt + UiState.kt, with state exposed via StateFlow and collected as State in Compose.

✨Features

  • Auto-import transactions from Monobank
  • Add a purchase you made with cash
  • AI checks for unnecessary subscriptions and spending patterns
  • Money-saving challenges with progress tracking
  • Financial tips generated by AI using your transaction behavior
  • Personal finance AI assistant chat (questions, tips, recommendations)
  • NBU currency exchange rates in-app
  • Savings statistics from completed challenges
  • Finance lessons and questions as part of the literacy-focused product concept
  • Local in-app currency (research mechanic) earned for achievements like:
    • completing challenges/goals
    • correct answers in lesson questions
    • completing AI-generated educational video-related tasks

Note: some literacy/gamification mechanics above are part of the broader research concept and may evolve across iterations.

🤖AI in Spendly

The AI layer is designed to run on the backend with Ollama + Gemma 4 locally, enabling:

  • transaction-aware financial tips,
  • personalized assistant chat,
  • contextual financial guidance.

📸Screenshots

home transactions_screen profile

   

challenges chat_with_ai uneededsubs

   

list_of_goals goals fin_tips

🛠️Technologies used

Android app

  • Kotlin
  • Jetpack Compose + Material 3
  • Android Architecture Components (ViewModel, Lifecycle)
  • Koin (dependency injection)
  • OkHttp (+ okhttp-digest)
  • Kotlinx Serialization
  • Kotlin Coroutines
  • Android DataStore (Preferences)
  • Firebase Cloud Messaging (FCM)
  • Compose Navigation
  • Compose Charts

Build/tooling

  • Gradle (Kotlin DSL)
  • Android Gradle Plugin 9.x
  • KSP
  • GitHub Actions for CI (build and testDebug workflows)

❓How to run this project?

Prerequisites

  • Android Studio (latest stable recommended)
  • JDK 21 (JetBrains toolchain is configured in Gradle)
  • Android SDK with emulator/device support
  • Running Spendly backend locally
  • Monobank API token

Steps

  1. Clone the repository.
  2. Open the project in Android Studio.
  3. Ensure Gradle sync completes.
  4. Start the backend locally on port 8080.
  5. Run the app on an Android emulator/device.
  6. In the app, authorize with Monobank and provide your API token.

Command line (optional)

./gradlew clean testDebug
./gradlew clean build

🤝Contributing

Contributions are welcome.

If you want to contribute:

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Open a pull request with a clear description

Please keep changes focused, tested, and consistent with the current architecture.

📄License

This project is licensed under the Apache License 2.0. See LICENSE for details.

About

Spendly is a JASU research project - an AI powered mobile app for improving financial literacy and expense tracking. It stands out through gamification, smart automation, and user-friendly interface.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages