Developing Mobile Applications for Crypto Event Calendars
Ethereum hardfork announced a month ago — user learns about it two hours before block because calendar app just displayed list without notifications. Crypto calendar without smart notifications is just JSON reader.
What Crypto Event Calendar Is Data-Wise
Event types to track: exchange listings, hardforks and network updates, token unlocks (vesting), AMAs and DAO votes, earnings reports for public crypto companies, futures expirations on CME.
Sources: CoinMarketCal (coinmarketcal.com/api), CryptoPanic (news aggregator with event categorization), Messari, CoinGecko Events API. For on-chain events (unlocks, votes) — direct node calls or The Graph subgraphs.
Data is heterogeneous: some sources provide exact UTC time, others only dates. This affects notification logic.
App Architecture
Client: Flutter (Dart) or React Native — depends on animation and UI customization needs.
Backend: event aggregator normalizing data from multiple sources → PostgreSQL storage → push service for notifications.
Sync: app gets events via REST API (lists, filters) and subscribes to push by categories (FCM topics: crypto_listings, eth_network, btc_network etc).
Reminder System — Most Non-Trivial Part
User wants reminder 1 hour, 1 day, and at event. That's three different pushes with different timings. Server scheduler (Bull Queue + Redis or Sidekiq) calculates needed times when event is added and queues tasks.
Problem with events without exact time: if only date known (e.g., "Q2 2025"), set reminder for 09:00 UTC that day — standard practice in such apps.
On client user configures reminders via UI:
[✓] 1 day before
[✓] 1 hour before
[ ] At event time
Settings sync to server — schedules push sends for each user+event stored there.
Filters and Personalization
User watches specific coins from portfolio. Logical solution: wallet integration (read-only via WalletConnect or manual address) → auto-subscribe to events for portfolio coins.
At FCM level via dynamic topics: on portfolio change client unsubscribes from old topics, subscribes to new via FirebaseMessaging.instance.subscribeToTopic().
Offline and Caching
Calendar events are good aggressive caching candidate. On Flutter use Hive or Isar for local storage: on app open show cache, update in background. Stale-while-revalidate strategy.
Without network app shows last fetched events with update timestamp. Reminders via push work — they're server-side.
Development Process
Audit data sources, choose API → design event normalization schema → develop backend aggregator → develop mobile client (list, detail card, filter settings) → reminder system → test → publish.
| Scope | Timeline |
|---|---|
| MVP: one source, basic push | 4–5 weeks |
| Full product: multi-source, personalization, portfolio | 10–14 weeks |
Pricing calculated after analyzing source requirements and personalization level.







