Skip to content

Hacybeyker/FinFlow

Repository files navigation

💸 FinFlow

Your finances, in your pocket. No cloud, no accounts, no excuses.

Offline-first personal finance manager, encrypted at rest and with a home-screen widget.

Kotlin Jetpack Compose Material 3 Min SDK 26 Offline-First Encrypted License MIT


FinFlow tracks income and expenses while working 100% offline. You log transactions by category, see your balance and trends in charts drawn with Canvas, and check the month's summary from a widget without opening the app. The local database is the single source of truth —there's no backend— and, since it's about money, it's encrypted at rest and protected with biometrics.

✨ What sets it apart

🔒 Real privacy Your finances never leave the device. Local DB encrypted with SQLCipher; the passphrase lives in the Android Keystore.
Always works Offline-first: zero loading screens, zero network errors. The UI reacts instantly thanks to Room + Flow.
📊 Clear picture Monthly balance, spending by category (donut) and month-over-month trend (bars), all in Canvas for a lightweight APK.
🏠 Present beyond the app A Glance widget and WorkManager reminders so you never forget to log an expense.

In one sentence: keep control of your money in a way that's private, fast, and free of any internet or server dependency.

🛠️ Stack

Layer Technologies
Language & UI Kotlin · Jetpack Compose (Material 3 + dynamic color) · Navigation 3 · Canvas for charts (no charting libs)
Architecture Lightweight Clean Architecture (domain / data / ui) · MVI (one immutable state per screen) · Coroutines + Flow / StateFlow · Hilt
Data & security Room (+ KSP) as the SSOT with Flow DAOs · SQLCipher · Android Keystore / security-crypto · androidx.biometric · DataStore
System Jetpack Glance (widget) · WorkManager (reminders and deferred tasks)
Quality & tests JUnit · MockK · Turbine · coroutines-test · Roborazzi · ktlint · detekt · Android Lint

⚡ Commands

Requirements: JDK 11 · Android Studio (AGP 9.2.1) · compileSdk 37 · targetSdk 36 · minSdk 26. All versions live in the Version Catalog (gradle/libs.versions.toml).

Action Command
Build (debug) ./gradlew assembleDebug
Install on device ./gradlew installDebug
Release build ./gradlew assembleRelease
Format (ktlint) ./gradlew ktlintFormat
Quality (lint + ktlint + detekt) ./gradlew codeQuality
Format + verify everything ./gradlew formatAndAnalyze
Unit tests (JVM) ./gradlew test
Instrumented tests ./gradlew connectedAndroidTest

💡 Before every commit: ./gradlew formatAndAnalyze.

🗂️ Structure

FinFlow/
├── app/src/main/java/com/hacybeyker/finflow/
│   ├── domain/   # Entities, use cases and repository interfaces (pure Kotlin)
│   ├── data/     # Room, DAOs, mappers and repository implementations
│   └── ui/       # Compose screens, ViewModels (MVI) and theme
├── config/detekt/             # detekt configuration
├── gradle/libs.versions.toml  # Version Catalog (dependencies SSOT)
├── lint.xml · .editorconfig   # Lint rules and code style
├── CHANGELOG.md               # Version history
├── DESIGN.md                  # Design system (colors, typography, spacing, components)
└── AGENTS.md                  # Standards and guide for AI assistants

🤝 Contributing · 🤖 For AI assistants

The architecture, SOLID standards, MVI patterns and implementation rules live in AGENTS.md, and the visual design system (colors, typography, spacing, components, light/dark) in DESIGN.md — read both before touching any code (human or AI).

In short: ktlint android_studio style, max_line_length = 120, 4-space indentation, no wildcard imports or trailing commas, dependencies always via the Version Catalog, and UI built only from design tokens (MaterialTheme.*). Keep formatAndAnalyze and the tests green, and update the CHANGELOG.md.

📄 License

Distributed under the MIT license — see LICENSE.

Copyright © 2026 Carlos Osorio (hacybeyker).

Packages

 
 
 

Contributors

Languages