Як я створив застосунок для обліку бюджету: розробка на Jetpack Compose, технічні граблі та алгоритм фінансового радара
Привіт, спільното!
Мене звати Дмитро. Хочу поділитися історією створення свого pet-проєкту — Android-застосунку для обліку домашнього бюджету DimFin, який нещодавно вийшов у реліз в Google Play.
Ідея та передумови
Тривалий час я шукав для себе зручний інструмент фінансового обліку. Таблиці в Google Sheets на смартфоні вимагають забагато кліків та уваги. Популярні трекери з банківською синхронізацією не влаштовували з точки зору приватності — не хотілося надавати стороннім сервісам доступ до банківських кабінетів, та й стабільність таких API часто кульгає. А більшість простих офлайн-блокнотів або зупинилися в дизайні 10 років тому, або завалені нав’язливою рекламою.
Я поставив собі за мету зробити сучасний, швидкий та на 100% автономний застосунок:
- Запис витрати має займати до 3 секунд.
- Жодних серверів, реєстрацій та хмар — повна приватність, база даних живе лише на смартфоні.
- Застосунок не просто фіксує витрати, а виступає помічником: щодня рахує безпечний ліміт і підказує, як спокійно дожити до кінця місяця.
З якими технічними труднощами зіштовхнувся під час розробки
- Найскладнішим завданням було створити математичну модель, яка б адекватно прогнозувала фінансовий стан на кінець місяця. На початку місяця даних мало,таі перша ж велика покупка може спотворити прогноз. Довелося реалізувати динамічний розрахунок темпу витрат (Spending Pace), який враховує обов’язкові щомісячні зобов’язання (кредити/розстрочки), залишок днів та адаптує рекомендований денний ліміт у реальному часі.
- Для зручної роботи з датами використовується java.time (LocalDate, YearMonth). Щоб застосунок стабільно працював і на старіших версіях Android без падінь, довелося налаштовувати Core Library Desugaring (desugar_jdk_libs).
- Багато виробників смартфонів «вбивають» фонові процеси. Щоб нагадування про сплату кредитів та щоденні підсумки надходили вчасно без зовнішніх push-серверів, налаштував періодичні воркери через WorkManager з коректною обробкою системних дозволів на Android 13+.
- Щоб облік не перетворювався на рутину, додав блок швидких шаблонів на головному екрані (один дотик — і ранкова кава чи проїзд уже в базі) та інтерактивні свайпи для редагування/видалення транзакцій із можливістю швидкого 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 чи функціоналі? Які фінансові інструменти використовуєте ви?
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів