Catalog empowers artists with greater control in monetizing their work and community through the use of artist tokens, which unlock rewards, exclusive content, and revenue share for supporters.
Artists can upload and sell their work on Catalog for whatever price they choose. In this hack, artists upload by choosing from any of their existing Audius tracks. Listeners can stream music, and also purchase music using Dai. Upon purchasing work, listeners receive artist tokens proportional to the amount they spend, and proportional to the time of their purchase – earlier supporters receive more tokens per Dai than later ones. Supporters also receive an mp3 download, unlimited streaming, and the addition of this track to their collection.
Tokens on Catalog give artists a map of their community, allowing them to share any amount of value with any level of supporter. Rewards can be anything. In the case of our hack, token holders can stake tokens to earn revenue share from the artist they've supported. When work is purchased, 90% of spent funds go directly to the artist (collaborations not yet supported), and the remaining 10% are sent to a revenue share pool, which is split proportionately amongst token stakers.
In production, artists could customize this split, and add any variation of other perks or rewards, such as enabling token holders to spend them like credits on more content from the artist, or enabling supporters with over 1000 tokens to access exclusive releases, or enter a particular discord channel. Their are limitless possibilities to what a token might enable a community to do, and because Catalog tokens are ERC-20, the rewards can be extended beyond the limits our front-end. We also explored the idea of, if tokens are spent like credits, upon spending, 1/3 go directly to the artist, 1/3 to the staking pool, and the remainder are burned. We plan to experiment with unique models to see how we can best recycle value back into the community and the artist.
These are some features we'd have liked to build If we had more time:
We built Catalog with a Vue frontend, leveraging the Audius API for existing user/track metadata and storing additional information in Textile Threads. To meet the time constraint we just used the client for making all Thread updates and stitched together our data model with the Audius schema on the frontend user helper functions & the Vuex store.
It was a pretty ugly challenge since Textile Threads aren't relational and we didn't realize this until we'd already set up our Thread & had updates working via the client. Since Audius users can change their track/user metadata from the Audius frontend, we couldn't rely on our internal storage of that info so we had to query every time. To make matters worse, most Audius API endpoints didn't give us enough data from a single fetch call, and many operations were dependent on data from either Textile or a different Audius endpoint. We spent an unfortunate amount of time just getting CRUD operations to play nicely (very ~ hacky ~).
Overall impressed with how well it works considering how many edge cases there are. Generally very impressed with what we were able to build.