Raduno

Create & manage events onchain with Raduno. Register with one tap, your wallet is your ticket.

Websitegithub
  • 0 Raised
  • 248 Views
  • 0 Judges

Categories

  • Base
  • ENS
  • XMTP
  • 🤖 AI [MAIN TRACK]

Gallery

Description

PROJECT NAME

Raduno ("Gathering" or "Meetup" in Italian)

DESCRIPTION OF THE PROJECT (2 lines)

Raduno is a fully decentralized event platform (luma-like) available as a miniapp on Base.
It removes the friction of using multiple platforms for events (Luma to register, Telegram/Discord to communicate, wallet to get POAPs...) while providing a beginner-friendly web3 solution.

TELEGRAM USER NAME

@rezarahemtola

REPOSITORY WITH THE PROJECT'S CODE

https://github.com/RezaRahemtola/ETHRome-2025

VIDEO DEMO

https://www.youtube.com/watch?v=kEEfM8Oo6Ps

Website URLs

Frontend (available as Base miniapp): https://raduno.reza.dev

Contract addresses

Bounties

Base

Raduno is a miniapp deployed in production & accessible in the Base app, following the guidelines expected for miniapps (welcome screen, light/dark themes, paymaster for transactions...)
It's fully integrated in the Base app, for example with actions to share to feed and with group conversations automatically created for people participating to an event.
Additionally, all the onchain interactions are done on Base mainnet with the contracts listed above, and the XMTP agent of Renato has a Basename and is reachable in chat (raduno.base.eth).
Transactions are sponsored with a paymaster both in the miniapp and in chats when discussing with the Raduno XMTP agent.

Feedbacks:

  • There are multiple tutorial / docs to create a miniapp, which can be a bit confusing (some require a base account owner, others no), it would be nice to unify it and have a single place where to find this information to easily get started
  • Due to the smart wallet architecture, it's hard to get the result of transactions sent (knowing if they succeeded or failed is easy, but getting the data is harder). In my case to get the address of a deployed smart contract I had to create a factory contract.
    It also complexifies a lot access permissions as the transactions are not sent directly by the user's wallet. Overall it would be nice to have some more extensive docs on smart wallets, their behavior & how to correctly implement features like those (especially useful for porting existing apps I think)
  • With onchainkit / minikit, it's not possible to have the Base owner address visible in farcaster.json (putting it in the config doesn't generate it in the JSON file)
  • The fact that a new post is needed to reindex the manifest changes could be documented somewhere
  • It would be great to have a possibility to have multiple accounts to test, maybe multi accounts in the Base app when in dev mode ? To more easily test miniapps that have flows where different accounts interact with each other (like in my case, one user creating an event and others registering, I would need at least 2 accounts to test correctly without doing hacky stuff)
  • In the Transaction component of onchainkit, the capabilities prop is marked as deprecated, hence the underlying paymasterService.url is also, but its required to have the paymaster working (at least on my side following the docs tutorial to implement it)
  • Otherwise the experience with building miniapps is really great. Would need to see what is looks like to port an existing app (which I plan to do soon), but overall a lot of great user experiences can arise with the new Base app imo ;)

ENS

Raduno works with the ENS name raduno.eth, and with smart contracts deployed with durin.dev on Base mainnet (listed above) to create subnames. Every event created on Raduno is a smart contract that itself registers his own ENS and stores all the metadata of the event in ENS text records (name, description, location, category, date, website...).
This allows the event to act as an independent entity, that can be verified (if later we allow importing existing names instead of just using raduno.eth, we could have rome-meetup-2025.ens.eth for example, ensuring the authenticity) and with all the data being stored in a decentralized way.
The smart contracts are set up to allow multiple person to edit the ENS details, even if this feature isn't enabled in the frontend yet.

Feedbacks:

  • Actually already had this issue in the past, but in the L2Registrar example the StringUtils import is not found (in Remix at least), had to work around it to define only what is needed in the contract from it https://github.com/RezaRahemtola/ETHRome-2025/blob/main/contracts/L2Registrar.sol#L6
  • L2Registry as an approve function (useful in my case to allow other people to edit the text records of an ENS, not just the smart contract itself), but having a revoke approval function would be great too (but from what I understood the approval is inherited, and currently revoked when the ENS NFT is sent out, as the approval is made for that and not actually for just editing the records)
  • Had a weird issue when setting the contenthash of the ENS in the contract in Solidity directly, didn't had time to debug a lot further but maybe something to dig into ;)

XMTP

In addition to being a miniapp accessible in the Base app, Raduno also leverages XMTP for its events. An XMTP agent is also deployed and is performing several tasks:

  • Creating group chats for every event, adding / removing members to it as they register / unregister to events
  • Responds to DM (at raduno.base.eth) to provide AI assistance to find events to the liking of the user
  • Also allow users in DM to directly register to events from the chat with the content type to send calls to the user's wallet, and using the Base paymaster to sponsor these transactions

This removes the friction when participating to events, no need for organizers to push people to join a Telegram group or a Discord server, this is done automatically and provides a decentralized & private messaging for each event, simplifying the life of everybody.
A lot of other interesting ideas could be implemented with such an agent linked to the Raduno event platform (event creation from a chat, registering a group of friends all at once...)

Feedbacks:

  • It's really good to have the llms-full.txt, it gives really good results to bootstrap with AI,
  • Same as Base, the WalletSendCallsParams type from @xmtp/content-type-wallet-send-calls says the capabilities should be a record of string -> string, but I have to ignore it and put the object the url prop paymasterService: { url: 'URL'} for the functionality to work
  • Had some bugs with the markdown content (with the Markdown content type) that doesn't show correctly (links especially if they are not in the markdown format, if it's just the URL it's sometimes not displayed entirely and overlapping on other texts, even if I put line breaks),
  • Tried a few things with inline actions but it was a bit too complex and didn't had too much time left, but some docs / tutorials about it in addition to the example repo would be really cool as the concept is very interesting

Attachments