DeGa is a decentralised photo gallery for NFT communities. Users log in and see on their dashboard to what galleries they have access to. If no gallery exists yet for one of their communities (aka NFT collections) users can create a new gallery with a few clicks. All images are stored on IPFS while links to the images are stored in a table by tableland.xyz. These tables come with smart access control so that only members of a community can edit entries in these tables. DeGa also allows users to chat with each other inside the gallery.
This project uses web3.storage/IPFS to store the uploaded images. The API is easy to use and a perfect fit for this use case. The tricky part with decentralised storage is the sharing of links to the storage location. For that a table by tableland.xyz. The vision behind tableland.xyz is great but the documentation is still a bit rough and sometimes inconsistent. The access control feature through policy contracts is well thought out. Unfortunately the tableland network was down at the end of the hackathon which made it impossible to test every part of my implementation. I think this early hiccups are part of the process. Looking forward to trying out tableland again when it's more stable. Accessing blockchain is still tricky. For my project, I had two important queries. First, I wanted to find all NFTs a user owns. For that I used NFTPorts API. I was impressed how quickly newly minted NFTs were indexed. The API is blazingly fast and is super easy to work with. Second, I needed to check for every NFT a user owns if a tableland table was already created or not. This turned out to be tricky since the user is usually not the owner of the table but still might have access to it through smart access control. So the query needs to go through all existing tables and check for what NFT collection the table & custom policy was created. I started using the Covalent API for it since Covalent makes it easy to get all transactions for a smart contract (tableland contract in this case). I couldn't finish it properly since tableland was down at some point and I had more pressing tasks to focus on ;) So that part is a little bit mocked in the current version. People love to share their thoughts around pictures. So it was natural to implement some kind of chat functionality. For that I started using XMTP. The docs are clean and easy to understand. I didn't have enough time to finish the feature though.
Overall, I am pretty impressed how quickly developer tooling improves!