Як я створив застосунок для обліку бюджету: розробка на Jetpack Compose, технічні граблі та алгоритм фінансового радара

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Привіт, спільното!

Мене звати Дмитро. Хочу поділитися історією створення свого pet-проєкту — Android-застосунку для обліку домашнього бюджету DimFin, який нещодавно вийшов у реліз в Google Play.

Ідея та передумови

Тривалий час я шукав для себе зручний інструмент фінансового обліку. Таблиці в Google Sheets на смартфоні вимагають забагато кліків та уваги. Популярні трекери з банківською синхронізацією не влаштовували з точки зору приватності — не хотілося надавати стороннім сервісам доступ до банківських кабінетів, та й стабільність таких API часто кульгає. А більшість простих офлайн-блокнотів або зупинилися в дизайні 10 років тому, або завалені нав’язливою рекламою.

Я поставив собі за мету зробити сучасний, швидкий та на 100% автономний застосунок:

  1. Запис витрати має займати до 3 секунд.
  2. Жодних серверів, реєстрацій та хмар — повна приватність, база даних живе лише на смартфоні.
  3. Застосунок не просто фіксує витрати, а виступає помічником: щодня рахує безпечний ліміт і підказує, як спокійно дожити до кінця місяця.

З якими технічними труднощами зіштовхнувся під час розробки

  1. Найскладнішим завданням було створити математичну модель, яка б адекватно прогнозувала фінансовий стан на кінець місяця. На початку місяця даних мало,таі перша ж велика покупка може спотворити прогноз. Довелося реалізувати динамічний розрахунок темпу витрат (Spending Pace), який враховує обов’язкові щомісячні зобов’язання (кредити/розстрочки), залишок днів та адаптує рекомендований денний ліміт у реальному часі.
  2. Для зручної роботи з датами використовується java.time (LocalDate, YearMonth). Щоб застосунок стабільно працював і на старіших версіях Android без падінь, довелося налаштовувати Core Library Desugaring (desugar_jdk_libs).
  3. Багато виробників смартфонів «вбивають» фонові процеси. Щоб нагадування про сплату кредитів та щоденні підсумки надходили вчасно без зовнішніх push-серверів, налаштував періодичні воркери через WorkManager з коректною обробкою системних дозволів на Android 13+.
  4. Щоб облік не перетворювався на рутину, додав блок швидких шаблонів на головному екрані (один дотик — і ранкова кава чи проїзд уже в базі) та інтерактивні свайпи для редагування/видалення транзакцій із можливістю швидкого Undo.

Плани та висновки

Проєкт навчив мене проєктувати застосунки від ідеї до повного циклу релізу в Google Play Console (включно з проходженням модерації, налаштуванням ASO та політиками приватності).

Попереду — додавання віджетів на робочий стіл, розширення категорій, вдосконалення аналітики, а також розробка повноцінного сімейного бюджету з можливістю ведення спільної бухгалтерії (чоловік, дружина, діти).

Посилання: • Google Play: play.google.com/...​pps/details?id=com.dimfin • Сайт проєкту: dimadst.github.io/Aivengo_dst

Технічний стек і архітектура

Для реалізації я обрав сучасний Android-стек: • UI: Повністю декларативний Jetpack Compose + Material 3 (із плавною темною темою та анімаціями). • Мова: Kotlin (Coroutines, StateFlow). • Архітектура: Clean Architecture з чітким розділенням на Data, Domain і UI шари. • База даних: Room (SQLite) для транзакцій, кредитів та категорій. • Налаштування: Jetpack DataStore Preferences замість застарілого SharedPreferences. • Dependency Injection: Dagger Hilt для чистих зв’язків та ізоляції коду. • Фонові задачі: WorkManager для локальних сповіщень про обов’язкові платежі.

Буду радий почути ваші відгуки: що можна покращити в архітектурі, UI/UX чи функціоналі? Які фінансові інструменти використовуєте ви?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі