A hardfork was announced a month in advance, but the user learned about it two hours before the block — because a calendar app just displayed a list without reminders. We encountered this problem in several projects and developed a system that solves it at the architecture level. A crypto calendar without smart notifications is just a JSON reader. Our team with 10+ years in mobile development and 40+ implemented projects is ready to build your crypto calendar turnkey. Thanks to ready-made modules, you save up to 40% of development time compared to building from scratch.
Why data aggregation is the main pain
Event types to track: exchange listings, hardforks and network upgrades, token unlocks (vesting), AMAs and DAO votes, report releases and earnings calls for public crypto companies, CME futures expirations. Sources: CoinMarketCal, CryptoPanic, Messari, CoinGecko Events API, The Graph. Problem: data is heterogeneous — some APIs give exact UTC time, others only a date. This directly affects reminder logic. Normalizing such data is a key step, and we implement it using a flexible schema in PostgreSQL. Experience shows that without normalization, about 20% of events may have incorrect time in push notifications.
How to choose a framework: Flutter vs React Native for a crypto calendar
| Criterion | Flutter (Dart) | React Native (TypeScript) |
|---|---|---|
| Performance | high, composited | high, JS-native bridge |
| UI customization | full | via native modules |
| Push notifications | FCM + local_notifications | FCM + notifee |
| Caching | Hive/Isar | AsyncStorage + MMKV |
| MVP development time | 4–5 weeks | 5–6 weeks |
Both frameworks provide cross-platform capabilities, but Flutter offers smoother UX for calendar animations. We choose based on your requirements — contact us for a consultation.
How we build the app architecture
Client: Flutter (Dart) or React Native — depends on requirements for animations and UI customization. Both frameworks ensure high performance and cross-platform capability.
Backend: event aggregator with data normalization from multiple sources → PostgreSQL for storage → push service for notifications. We guarantee the system scales to any load — up to 1 million events per day.
Synchronization: the app retrieves events via REST API (lists, filters) and subscribes to push notifications via Firebase Cloud Messaging by categories (topics: crypto_listings, eth_network, btc_network, etc.).
How the reminder system works
The user wants reminders 1 hour before, 1 day before, and at the event time. That's three different push notifications with different timings. A server-side scheduler (Bull Queue + Redis or Sidekiq) calculates the required moments when the event is added and places tasks in a queue. This approach reduces device load by 30% and increases delivery reliability to 99.5%.
Problem with events without exact time: if only a date is known (e.g., "Q2 next year"), the reminder is set for 09:00 UTC that day — a standard practice in such apps. On the client, the user configures reminders via UI:
[✓] 1 day before [✓] 1 hour before [ ] At event time Settings sync with the server — it stores the push schedule for each user and event. Unlike local notifications, server-side approach guarantees delivery even when the app is closed.
Filters and personalization
The user follows specific coins from their portfolio. A logical solution: integration with a wallet (read-only via WalletConnect or manual address entry) → automatic subscription to events for coins in the portfolio. At the FCM level, this is implemented through dynamic topics: when the portfolio changes, the client unsubscribes from old topics and subscribes to new ones via FirebaseMessaging.instance.subscribeToTopic(). This mechanism reduces unnecessary notifications by half compared to client-side filtering.
Offline and caching
Calendar events are a good candidate for aggressive caching. On Flutter, we use Hive or Isar for local storage: when opening the app, we show the cache and update in the background. Stale-while-revalidate strategy. When offline, the app shows the last loaded events with a timestamp. Push reminders continue to work — they are server-side.
What's included in the work
- Architectural documentation and data schemas
- Client development on Flutter or React Native
- Backend aggregator with normalization
- Push notification setup (FCM/APNs)
- Integration with data sources (CoinMarketCal, Messari, The Graph, etc.)
- Deployment to App Store and Google Play
- 2 weeks of technical support after launch
Development process
Audit of data sources and API selection → design of event normalization schema → backend aggregator development → mobile client development (list, detail card, filter settings) → reminder system → testing → publication.
| Scope | Timeline |
|---|---|
| MVP: single source, basic push | 4–5 weeks |
| Full product: multi-source, personalization, portfolio | 10–14 weeks |
Cost is calculated after requirements analysis for data sources and personalization level. Contact us for a project estimate — we will prepare a commercial proposal considering your deadlines and budget. Get a free 30-minute architecture consultation.







