Разработка мобильного приложения для учёта расходов
Приложение для учёта расходов — это не бюджетирование и не инвестиции. Здесь главное — скорость ввода. Если пользователю нужно делать больше трёх тапов чтобы зафиксировать, что он только что потратил 200 рублей на кофе, — он забросит приложение через неделю. Всё остальное (аналитика, лимиты, экспорт) вторично.
Скорость ввода как архитектурная задача
Быстрый ввод расхода нужно проектировать на уровне UX и реализации одновременно.
На iOS: виджет Home Screen через WidgetKit с AppIntent (iOS 16+) открывает шторку ввода без полного запуска приложения. INAddTaskIntent / кастомный Shortcut позволяет вносить расходы голосом через Siri. Живая активность в Dynamic Island показывает баланс дня без разблокировки экрана.
На Android: Tile в Quick Settings через TileService — один свайп и тап, приложение не открывается полностью. Floating widget поверх других приложений через WindowManager (нужно разрешение SYSTEM_ALERT_WINDOW) — спорно с точки зрения UX, но некоторые пользователи обожают.
Нумпад для суммы — кастомный, не системный: системная клавиатура добавляет 200–300 мс задержки на показ. Автофокус на поле суммы, категория по дефолту — «последняя использованная», оценка по геолокации (Coffee shop рядом → категория «Еда»).
Категории и лимиты
Категории с иконками и цветами, вложенность максимум один уровень (подкатегории). Месячные лимиты на категорию — храним как отдельную сущность BudgetLimit с categoryId, amount, month. При превышении 80% лимита — локальное уведомление. Расчёт прогресса — только при открытии соответствующего экрана плюс фоновый пересчёт через BGAppRefreshTask раз в час.
Аналитика и экспорт
Графики: круговая диаграмма по категориям за период, столбчатый график по дням. На Flutter — fl_chart, на iOS нативно — Swift Charts (iOS 16+). Не тащи тяжёлые библиотеки для двух простых графиков.
Экспорт в CSV и PDF. CSV — тривиально. PDF через PDFKit (iOS) или PdfDocument (Android) — рендерим таблицу расходов с итогами. Важно: пользователь должен мочь выбрать период и набор категорий перед экспортом.
Sync и мультиустройства
Если нужен sync — Firebase Realtime Database или Firestore с merge-логикой. Главная ловушка: конфликты при одновременной записи с двух устройств. Стратегия: last-write-wins по updatedAt timestamp для простых случаев, либо CRDT для сложных. Для большинства expense-трекеров достаточно last-write-wins.
Процесс работы
Уточняем: нужна ли синхронизация между устройствами, один пользователь или семейный аккаунт, нужен ли импорт из банковских выписок, целевые платформы. Проектируем модель данных с расчётом на масштаб (год расходов = несколько тысяч записей, это немного).
Ориентиры по срокам
Базовый трекер с быстрым вводом, категориями, лимитами и экспортом CSV — 3–5 недель. С виджетами, PDF-отчётами, CloudKit/Firebase sync и графиками — 7–10 недель. Стоимость рассчитывается индивидуально.







