A decentralized dating application based on the metadata of owned NFTs, hence Metadating!
This project is like a piece of work that has been put together to create this idea of using owned NFTs as utility, so like somewhat interoperability is there as we can use different nft contracts' NFT Tokens (currently Ethereum based). In Metadating, you can easily create your profile, and you don't have to worry about storing data somewhere; everything is done in a decentralized fashion; information is on the tableland, which uses IPFS, which is decentralized. This project uses XMTP to do peer-to-peer communication once the user accepts the request.
I have used Nextjs as the frontend framework and some minor API routes where Tableland is needed to be stored as it requires the private key to work. Also, due to the time constraint and the team size, which is one, I couldn't add extra features which I intend to add after this Hackathon ends. I have used Polygon Mainnet to mint the NFTs using NFTPort API. All the Metadata and the profile images are stored on IPFS using nft.storage . There are three main sections of the Dapp,
The Register section -> In the register section, which is the main landing/first page of our Dapp, I have used NFTPort API to mint the nfts of the users who will be registering for the Metadating feature. While registering, they need to add their WorldId, a unique technology that clearly fits in our app use case; WorldId provides a robust verification with their tech. Only verified users/real humans would be allowed to register for this Metadating app to prevent fake logins and other bad activity. Here we mint the nft and make the user opt-in into the EPNS channels called Metadata (v1.1 Staging) deployed on Polygon Mumbai Testnet to get important notifications related to requests.
Search page section (/find): In the second section of the page, there is an extensive search button where users would need to add the filter while searching. Once we click, we have to accept the XMTP enable identity message signature request. After that, using Covalent API and NFTPort API, the data is fetched from the blockchain, and all the user's nfts are shown. Once all the cards are loaded, there is a button to send a Request to each card; clicking the button will send an EPNS notification to the receiver address and send a request to Tableland, saving a pair of the information on who sent the request to whom.
Final Section - Profile Section (/profile): The Profile section shows your minted nft/profile. It will show the user's three fav nfts, which he added in the registration section. In the profile section, the Dapp will show users a list of the incoming requests and two options with it to Accept or Decline the request. Both requests will save the information to Tableland with certain status ''accepted'' or ''declined''. Once the user has accepted someone's request after getting the response from Tableland, we can see that now the users are given a hyperlink to go to XMTP dm, as they already have an incoming from the user whose request they accepted.
I faced difficulties mainly in implementing XMTP as I couldn't create a whole new chat application with UI integration due to the time constraint.
Some important links: Valist: https://app.valist.io/vinays/metadating_v1_staging Loom Demo Video: https://www.loom.com/share/79666da9d7b649c89aba16e1a30bb83b