Разработка мобильного приложения для крипто-календаря событий
Харdfork Ethereum анонсирован за месяц — пользователь узнал о нём за два часа до блока, потому что приложение-календарь просто показывало список без напоминаний. Крипто-календарь без умных уведомлений — это просто читалка JSON.
Что такое крипто-календарь событий с точки зрения данных
Типы событий, которые нужно отслеживать: листинги на биржах, харdforks и сетевые обновления, разлоки токенов (vesting unlock), AMA и голосования DAO, выход отчётов и earnings calls для публичных крипто-компаний, экспирации фьючерсов на CME.
Источники: CoinMarketCal (coinmarketcal.com/api), CryptoPanic (агрегатор новостей с категоризацией событий), Messari, CoinGecko Events API. Для on-chain событий (разлоки, голосования) — прямые запросы к нодам или субграфам The Graph.
Данные разнородные: одни источники дают точное время UTC, другие — только дату. Это влияет на логику напоминаний.
Архитектура приложения
Клиент: Flutter (Dart) или React Native — зависит от требований к анимациям и кастомизации UI.
Бэкенд: агрегатор событий с нормализацией данных из нескольких источников → PostgreSQL для хранения → push-сервис для уведомлений.
Синхронизация: приложение получает события через REST API (списки, фильтры) и подписывается на push-уведомления по категориям (топики FCM: crypto_listings, eth_network, btc_network и т.д.).
Система напоминаний — самая нетривиальная часть
Пользователь хочет напоминание за 1 час, за 1 день и в момент события. Это три разных push-уведомления с разными таймингами. Серверный планировщик (Bull Queue + Redis или Sidekiq) считает нужные моменты времени при добавлении события и ставит задачи в очередь.
Проблема с событиями без точного времени: если известна только дата (например, «Q2 2025»), напоминание ставим на 09:00 UTC этого дня — стандартная практика в подобных приложениях.
На клиенте пользователь настраивает напоминания через UI:
[✓] За 1 день
[✓] За 1 час
[ ] В момент события
Настройки синхронизируются с сервером — там хранится расписание push-отправок для каждого пользователя и события.
Фильтры и персонализация
Пользователь следит за конкретными монетами из своего портфеля. Логичное решение: интеграция с кошельком (read-only через WalletConnect или ручной ввод адреса) → автоматическая подписка на события для монет из портфеля.
На уровне FCM это реализуется через динамические топики: при изменении портфеля клиент отписывается от старых топиков и подписывается на новые через FirebaseMessaging.instance.subscribeToTopic().
Offline и кеширование
События календаря — хороший кандидат для агрессивного кеширования. На Flutter используем Hive или Isar для локального хранения: при открытии приложения показываем кеш, в фоне обновляем. Стратегия stale-while-revalidate.
При отсутствии сети приложение показывает последние загруженные события с меткой времени обновления. Напоминания через push продолжают работать — они серверные.
Процесс разработки
Аудит источников данных и выбор API → проектирование схемы нормализации событий → разработка агрегатора на бэкенде → разработка мобильного клиента (список, детальная карточка, настройки фильтров) → система напоминаний → тестирование → публикация.
| Масштаб | Срок |
|---|---|
| MVP: один источник, базовые push | 4–5 недель |
| Полный продукт: мультисорс, персонализация, портфель | 10–14 недель |
Стоимость рассчитывается после анализа требований по источникам данных и уровню персонализации.







