What it does

Moonboard is building the communication bridge between web3 and popular messaging platforms that users have come to love. It allows users to configure on-chain alerts so they can sleep well knowing that they will be notified when something of interest is happening.

  • 🔔 Your channels supported
    Moonboard delivers real-time alerts the way you want, with support for browser push notifications, email, SMS, Telegram and Discord.

  • ✉️ All details included
    Be the first to act with enriched notifications that include all relevant details fetched from on-chain and off-chain data sources.

  • 🌐 Multi-network ready
    We monitor every block from Moonbeam and Moonriver for events as soon as they are finalized. That's over ~14k blocks processed every day!

How we built it

We understand that phone numbers and email addresses are sensitive personal information, that's why we use the EIP-4361 standard to secure communication between the DApp and our backend.

The codebase also includes an implementation of the worker, which is a long running process that subscribes to new blocks via WebSockets and extracts their extrinsics and events in real-time. When it finds an event of interest, it uses its payload to fetch more details about it using the node's RPC methods and Polkassembly's public GraphQL endpoint. All this data is combined to create custom notifications that are then distributed to users subscribed to this event using Courier.


We also used Courier's designer to customize what the notification looks like across all those different platforms:


Challenges we ran into

Since Courier doesn't have an official integration for Telegram, I had to use the webhook integration. Which allowed me to start sending Telegram messages with very little custom code. It also introduced me to Jsonnet which I used to customize the payload and enable advanced features like Telegram's inline link buttons!

Another challenging integration was Discord since it requires bots to share a server with the user they want to send a private message to. I could have handled this by asking the user to join our server and provide their Discord user ID, but that would have been too cumbersome. We instead ask the user for permission to join servers on their behalf so we can add them to our server and grab their user ID all in one go using an implicit OAuth2 grant, which greatly improved the UX.

What we learned

This was my first introduction to the Moonbeam/Moonriver platform. I learned a lot about the sophisticated governance mechanism behind it, and it was a great opportunity to understand Polkadot-specific terminologies like pallets and extrinsics. I also had the chance to get familiar with the polkadot{.js} API which made it a lot easier to query nodes and interact with on-chain data.

Building my first DApp on Moonbeam was a breeze and I can't wait to continue building within the ecosystem and exploring the interoperability capabilities it offers.

What's next for Moonboard

One of our high-priority goals currently is to expand beyond governance by integrating with major players in the rich Moonbeam DeFi/NFT ecosystem and introducing new alerts for events like incoming transactions, NFT bids, liquidations, etc...
Another item on our to-do list is working on introducing more notification channels like WhatsApp and Facebook Messenger, I couldn't have done this before the deadline because the process can take multiple weeks on their side.

While we work on introducing new features, feel free to start using Moonboard! It is already fully functional and I'm hoping that it is a significant contribution to the Moonbeam community.

Built With

Share this project: