{"id":50909057,"url":"https://github.com/kitiket9/coinsift_app2","last_synced_at":"2026-06-16T08:02:21.511Z","repository":{"id":355602615,"uuid":"1227985947","full_name":"KiTiKeT9/coinsift_app2","owner":"KiTiKeT9","description":"Flutter-приложение для управления личными финансами: автоимпорт из SMS/push, учёт, аналитика, калькуляторы, инвестиционный портфель с MOEX","archived":false,"fork":false,"pushed_at":"2026-06-14T15:41:42.000Z","size":482,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T17:22:44.720Z","etag":null,"topics":["android","dart","finance","flutter","hive","material-3","moex","personal-finance","sms-parser"],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KiTiKeT9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-03T12:45:41.000Z","updated_at":"2026-06-14T15:41:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/KiTiKeT9/coinsift_app2","commit_stats":null,"previous_names":["kitiket9/coinsift_app2"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/KiTiKeT9/coinsift_app2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KiTiKeT9%2Fcoinsift_app2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KiTiKeT9%2Fcoinsift_app2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KiTiKeT9%2Fcoinsift_app2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KiTiKeT9%2Fcoinsift_app2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KiTiKeT9","download_url":"https://codeload.github.com/KiTiKeT9/coinsift_app2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KiTiKeT9%2Fcoinsift_app2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34396430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","dart","finance","flutter","hive","material-3","moex","personal-finance","sms-parser"],"created_at":"2026-06-16T08:02:18.471Z","updated_at":"2026-06-16T08:02:21.501Z","avatar_url":"https://github.com/KiTiKeT9.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 💰 Монетка\n\n**Современное мобильное приложение для управления личными финансами**\n\nУчёт расходов и доходов · Автоимпорт из SMS/push · Аналитика · Финансовые калькуляторы · Инвестиционный портфель\n\n[![Flutter](https://img.shields.io/badge/Flutter-3.x-02569B?logo=flutter\u0026logoColor=white)](https://flutter.dev)\n[![Dart](https://img.shields.io/badge/Dart-3.5%2B-0175C2?logo=dart\u0026logoColor=white)](https://dart.dev)\n[![Material 3](https://img.shields.io/badge/Material-3-757575?logo=materialdesign\u0026logoColor=white)](https://m3.material.io)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n\n\u003c/div\u003e\n\n---\n\n## ✨ Возможности\n\n### 📊 Учёт финансов\n- **Счета и карты** — поддержка дебетовых и кредитных карт, наличных, инвестиционных счетов; кастомные цвета карт с автоматически генерируемыми градиентами\n- **Транзакции** — добавление доходов и расходов с богатым списком категорий (Продукты, Транспорт, Здоровье, Развлечения, Шоппинг и др.)\n- **Smart-категоризация** — каждая категория имеет иконку и цвет для быстрого визуального восприятия\n\n### � Автоимпорт из SMS и push-уведомлений\n- **SMS-листенер** (`SmsListenerService`) — фоновое чтение банковских SMS с разрешением `RECEIVE_SMS` / `READ_SMS`\n- **Парсер банковских сообщений** (`SmsParser`) — извлекает сумму, валюту, merchant, тип операции из форматов Сбер, Т-Банк, ВТБ, Альфа, Газпромбанк и др.\n- **Push-листенер** (`PushListenerService`) — импорт через `NotificationListenerService` для банков, которые приходят только в виде push\n- **Дедупликация** (`TransactionDeduplicator`) — fuzzy-сличение по сумме / времени / merchant, чтобы одна операция из SMS + push не создавала дубль\n- **Черновики** (`@/lib/screens/drafts_screen.dart`) — распознанные транзакции попадают в очередь на подтверждение, пользователь решает, сохранять или игнорировать\n\n### �📈 Аналитика\n- **Круговая диаграмма расходов и доходов** с переключателем `SegmentedButton`\n- **Карточки доходов/расходов** с цветными акцентами\n- **Легенда категорий** — топ-4 категории с распределением сумм\n- **Общий баланс** по всем активным счетам и динамический период (текущий месяц/год)\n\n### 🧮 Финансовые калькуляторы\n- **Ипотека** — расчёт ежемесячного платежа, переплаты, графика\n- **Вклады** — доходность с учётом капитализации\n- **Кредиты** — аннуитетный и дифференцированный платёж\n- **Сравнение банков** — публичные ставки нескольких банков с подсветкой лучшего предложения и подгрузкой логотипов через [Clearbit Logo API](https://clearbit.com/logo)\n\n### 💼 Инвестиции\n- **Портфель** — отслеживание акций, облигаций, ETF с автоматическим обновлением цен\n- **Каталог инструментов** с живыми ценами и изменением за день через **MOEX ISS API** (batch-endpoint — один HTTP для всех тикеров)\n- **Офлайн-кеш каталога** в Hive — список инструментов и последние цены доступны, даже если MOEX недоступен\n- **Sparkline 30D** в диалоге добавления актива — график цены закрытия по свечам `iss.moex.com/.../candles.json`\n- **Логотипы эмитентов** с **персистентным кешем в Hive** (`LogoCacheService`) — магия-байты защищают от HTML-заглушек, таймауты не помечают URL как битый\n- **Безопасное удаление** — swipe-to-delete или явная кнопка-корзина с диалогом подтверждения\n- **Прибыль/убыток** — расчёт в абсолютном выражении и в процентах\n\n### 🔐 Безопасность\n- **PIN-код** с прогрессивной блокировкой после неверных попыток (30с → 1мин → 5мин → 15мин → 60мин)\n- **`flutter_secure_storage`** для PIN, токенов и ключа шифрования Hive (Android: EncryptedSharedPreferences, iOS: Keychain)\n- **Шифрование локальной БД** Hive с помощью случайного 256-битного ключа\n\n### 🎨 Современный UI/UX\n- **Material 3** дизайн-система, кастомная тема через `AppTheme`\n- **Светлая и тёмная темы** — корректно сохраняются и применяются с первого кадра при рестарте приложения\n- **Material 3 NavigationBar** с **glassmorphism** (`BackdropFilter` + blur)\n- **Inter** typography через Google Fonts\n- **Динамическое приветствие** — обновляется каждую минуту с эмоджи времени суток (☀️ утро, 🌤️ день, 🌆 вечер, 🌙 ночь)\n- **Shimmer-скелетоны** во время загрузки данных\n- **Empty states** с полезными подсказками\n- **Haptic feedback** для PIN и важных действий\n- **Кастомный фон** — пользователь может установить своё фото\n- **Бесшовный splash** без белого flash при старте (бренд-цвета на нативном уровне)\n\n---\n\n## 🛠️ Технологический стек\n\n| Категория | Технологии |\n|---|---|\n| **Framework** | Flutter 3.x · Dart 3.5+ |\n| **State management** | [Provider](https://pub.dev/packages/provider) |\n| **Локальная БД** | [Hive](https://pub.dev/packages/hive) · [hive_flutter](https://pub.dev/packages/hive_flutter) |\n| **Безопасное хранилище** | [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) |\n| **Графики** | [fl_chart](https://pub.dev/packages/fl_chart) · [syncfusion_flutter_charts](https://pub.dev/packages/syncfusion_flutter_charts) |\n| **Анимации** | [animate_do](https://pub.dev/packages/animate_do) · [flutter_animate](https://pub.dev/packages/flutter_animate) · [lottie](https://pub.dev/packages/lottie) |\n| **UI-помощники** | [shimmer](https://pub.dev/packages/shimmer) · [google_fonts](https://pub.dev/packages/google_fonts) · [flutter_svg](https://pub.dev/packages/flutter_svg) |\n| **Сеть** | [http](https://pub.dev/packages/http) · [dio](https://pub.dev/packages/dio) |\n| **OAuth/банки** | [webview_flutter](https://pub.dev/packages/webview_flutter) · [url_launcher](https://pub.dev/packages/url_launcher) |\n| **Автоимпорт** | `telephony` (SMS), `notification_listener_service` (push), кастомные парсеры и дедупликатор |\n| **Маркетдата** | [MOEX ISS API](https://iss.moex.com) (акции РФ), Yahoo Finance (зарубежные), Open Exchange Rates (валюты) |\n| **Утилиты** | [intl](https://pub.dev/packages/intl) · [uuid](https://pub.dev/packages/uuid) · [crypto](https://pub.dev/packages/crypto) |\n\n---\n\n## 📂 Структура проекта\n\n```\nlib/\n├── main.dart                  # Точка входа, инициализация Hive, темы, провайдеров\n├── models/                    # Hive-модели: Account, Transaction, UserProfile, Investment, ...\n├── providers/                 # ChangeNotifier-провайдеры (accounts, transactions, profile, ...)\n├── services/                  # Бизнес-логика: Database, Security, Banks API, OAuth, ...\n│   ├── sms_listener_service.dart       # Фоновое чтение банковских SMS\n│   ├── sms_parser.dart                 # Парсер сумм/мерчантов из банковских сообщений\n│   ├── push_listener_service.dart      # Импорт транзакций из push-уведомлений\n│   ├── transaction_deduplicator.dart   # Fuzzy-дедупликация (SMS ∪ push)\n│   ├── investment_api_service.dart     # MOEX/Yahoo + Hive-кеш каталога и свечей\n│   └── logo_cache_service.dart         # Постоянный кеш иконок банков и эмитентов\n├── screens/                   # Экраны UI\n│   ├── home_screen.dart       # Главный + Material 3 NavigationBar с glassmorphism\n│   ├── accounts_screen.dart   # Список счетов\n│   ├── add_transaction_screen.dart\n│   ├── calculators_screen.dart  # Ипотека, вклады, кредиты, сравнение банков\n│   ├── investments_screen.dart  # Портфель + каталог инструментов\n│   ├── profile_screen.dart    # Настройки, тема, PIN, кастомный фон\n│   ├── pin_lock_screen.dart   # PIN с прогрессивной блокировкой\n│   ├── bank_*_screen.dart     # Интеграция с банками\n│   ├── drafts_screen.dart     # Очередь черновиков из SMS/push на подтверждение\n│   └── ...\n├── widgets/                   # Переиспользуемые виджеты\n│   ├── account_card.dart      # Карточка счёта с динамическим градиентом по color\n│   ├── stats_cards.dart       # Карточки доходы/расходы\n│   ├── transaction_list.dart  # Список транзакций + ExpenseLegend\n│   ├── expense_pie_chart.dart # Pie chart для расходов и доходов\n│   ├── skeletons.dart         # Shimmer-скелетоны для загрузки\n│   └── bank_logo.dart         # Логотипы банков через Clearbit + fallback\n└── utils/\n    ├── app_colors.dart        # AppColors + AppTheme (light/dark)\n    ├── app_utils.dart         # Утилиты (форматирование, приветствие, ...)\n    └── constants.dart         # Справочники категорий\n```\n\n---\n\n## 🚀 Запуск\n\n### Требования\n- Flutter SDK ≥ 3.5\n- Android Studio / Xcode для сборки под целевую платформу\n- Подключённый эмулятор или физическое устройство\n\n### Установка\n```bash\ngit clone https://github.com/\u003cваш-логин\u003e/monetka_app.git\ncd monetka_app\nflutter pub get\nflutter run\n```\n\n### Полезные команды\n```bash\nflutter analyze              # Статический анализ кода\nflutter test                 # Запуск тестов\nflutter run --release        # Релизная сборка\nflutter build apk            # Сборка APK (Android)\nflutter build appbundle      # Сборка AAB для Google Play\nflutter build ios            # Сборка под iOS (нужен macOS)\n```\n\n---\n\n## 🎯 Архитектурные особенности\n\n- **Hive с шифрованием** — все локальные данные (счета, транзакции, инвестиции, профиль) хранятся в зашифрованных Hive-боксах с ключом из `flutter_secure_storage`\n- **Провайдер UserProfileProvider грузится в `create:`** провайдера — тема применяется с первого кадра, без задержки\n- **Прогрессивная блокировка PIN** в `SecurityService` через `_lockoutSteps` — защита от brute force\n- **Адаптивные цвета** через `Theme.of(context).colorScheme.onSurface` вместо хардкода — корректное отображение в обеих темах\n- **Native splash** настроен на бренд-цвет (`@color/brand_splash`) — нет белого flash при старте на Android\n- **Material 3 компоненты** — `NavigationBar`, `SegmentedButton`, `FilledButton`, `BottomSheet` с drag handle, `SnackBar` floating\n\n---\n\n## 🔒 Безопасность и приватность\n\n- Все финансовые данные хранятся **только локально** на устройстве пользователя\n- Облачная синхронизация отсутствует\n- PIN хешируется через SHA-256 и хранится в системном Keychain/EncryptedSharedPreferences\n- Логи `print()` заменены на `debugPrint()` — не попадают в release-сборку\n\n---\n\n## 📋 Дорожная карта\n\n- [x] Автоимпорт транзакций из SMS и push-уведомлений\n- [x] Fuzzy-дедупликация SMS ∪ push (юнит-покрытие в `test/transaction_deduplicator_test.dart`)\n- [x] Постоянный Hive-кеш логотипов и каталога инвестиций (офлайн-first)\n- [x] Sparkline-график по акциям (MOEX candles)\n- [ ] Миграция на `go_router` для deep links и OAuth-callback\n- [ ] Dynamic Color (Material You) — `dynamic_color` package, темы из обоев на Android 12+\n- [ ] Биометрическая аутентификация (`local_auth`) как альтернатива PIN\n- [ ] Облачный бэкап с end-to-end шифрованием\n- [ ] Виджеты на главный экран Android/iOS\n- [ ] Уведомления о превышении бюджета\n- [ ] Экспорт в CSV/PDF\n- [ ] Многовалютность с автоматической конвертацией\n- [ ] Запуск тестов в CI (GitHub Actions)\n\n---\n\n## 🤝 Вклад в проект\n\nPull request'ы приветствуются. Перед коммитом убедитесь, что:\n\n```bash\nflutter analyze       # должен пройти без замечаний\nflutter test          # все тесты должны проходить\ndart format lib/      # код отформатирован\n```\n\n---\n\n## 📄 Лицензия\n\nРаспространяется по лицензии **MIT**. Подробнее в файле [LICENSE](LICENSE).\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Сделано с ❤️ на Flutter**\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitiket9%2Fcoinsift_app2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkitiket9%2Fcoinsift_app2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitiket9%2Fcoinsift_app2/lists"}