diff --git a/BACKEND.md b/BACKEND.md deleted file mode 100644 index 81bb5eb..0000000 --- a/BACKEND.md +++ /dev/null @@ -1,28 +0,0 @@ -### (Backend is currently not implemented) - -- [Here are the files that interact with backend](https://lulox.notion.site/Database-files-04686fe4dfde4025a7939a3a9a5caca8?pvs=4) -- [Here's how I configured the local backend](https://lulox.notion.site/Firebase-10213362a574808a80f6c0bd8f890db2?pvs=4) (good to debug if it doesn't work out of the box) -- Update `eip712.ts` info with the deployed contract info (address and chain) when deploying to a live chain or when deploying a second version on the local chaion - -1. Set up your environment variables (and optionally, a local Firebase instance): - Copy the `packages/nextjs/.env.example` file to `packages/nextjs/.env.local` and fill in the required environment variables. - _When going online, fill in the commented out environment variables._ - - (Optional) Start the firebase emulators (vs set up a live Firebase instance). You will need to install the [firebase CLI](https://firebase.google.com/docs/cli#install_the_firebase_cli) on macOS, Linux, or use [WSL on Windows](https://learn.microsoft.com/en-us/windows/wsl/install) and run the following command: - - ```bash - # You might need to add a real "--project " (run firebase projects:list) - firebase emulators:start - ``` - -2. Seed data in your local Firebase instance: - - Copy the `packages/local_db/seed.sample.json` to `packages/local_db/seed.json` and tweak the data as you see fit. Then run the following command: - - ```bash - yarn seed - ``` - - To seed it to empty _*live*_ firestore instance you can use `yarn seed --force-prod`. If there is data in the live instance, it will not seed it again to bypass it use `yarn seed --reset --force-prod` - -Visit your backend on: `http://localhost:4000/`. You can see what data is being stored in your Firebase database. diff --git a/README.md b/README.md index 4d0ad0e..0ded420 100644 --- a/README.md +++ b/README.md @@ -55,13 +55,6 @@ yarn start Visit your app on: `http://localhost:3000`. You can interact with your smart contract using the `Debug Contracts` page. -# Roles within the platform - -- Artists -- NFT collectors (buy, sell, auction, collect) -- Marketplace owner (one address, could be a DAO in the future) -- Free users (watch, listen, in the future may consume ads) - # Roadmap - To see detailed development info, [see here](https://lulox.notion.site/TECHNAI-3458ad216e8c40a9b4489fe026146552?pvs=74) @@ -157,35 +150,52 @@ Visit your app on: `http://localhost:3000`. You can interact with your smart con # Completed product description +Technai is a Web3-based marketplace that empowers artists to mint and monetize their work as NFTs while providing collectors with unique investment opportunities. + +Our mission is to break down the barriers for artists and collectors by providing an easy-to-use platform that fosters creativity, collaboration, and sustainable income through digital art. The platform solves the problems of high minting costs for artists, lack of continuous royalties, and limited cross-chain interoperability, allowing for a more inclusive and connected NFT ecosystem. + +## Background + - Project started on [Aleph Hackathon](https://www.aleph.crecimiento.build/es-aleph-hackathon) - This repo was started with `npx create-eth@latest` with Foundry and integrated with the contracts and frontend from [github.com/luloxi/technai-marketplace](https://github.com/luloxi/technai-marketplace) -## Deployed artifacts - -### Frontend +## Roles within the platform -### Contracts +- Artists: Mint, remix, and earn royalties from NFTs. +- NFT Collectors: Buy, sell, auction, and collect NFTs while benefiting from features like batch buying and cross-chain transfers. +- Marketplace Owner: A central entity (or DAO) that manages marketplace fees and operations. +- Free Users: Explore, watch, and listen to content, with future plans to include ad-supported music streaming. ## Features -🎢 **Music player**: This music player allows listening to onchain music, creating playlists, liking songs, all from your desktop or your mobile with our PWA. +🎨 **Simple Mint**: A cost-free minting solution for artists where the first minter sponsors the collection’s minting costs. The sponsor receives a share of royalties on all future sales, creating opportunities for art investors. The marketplace takes a 5% fee on first mint transactions. -TBD -> If you listen to music you don't own, an ad will play once in a while to pay to the artists. +πŸ”„Β **Remixing Feature**: Allows artists to remix existing art and share royalties with the original artist. This promotes creative collaboration, where both the remixer and the original creator benefit from the sales of the remix. -πŸ“Š **Artist Dashboards**: Provide real-time insights for artists, such as statistics on how many times their NFTs have been viewed, liked, played (for music), etc. +βœ…Β **Royalties**: Artists can set royalties on their NFTs, earning passive income on future sales. In the case of Simple Mint, first minters also earn a percentage of royalties on all sales within the collection. -🎨 **Simple Mint**: A way for artists to upload and mint their collections for free, where a first minter sponsors the collection minting costs and gets a share of the royalties of all the NFTs minted in that collection. This creates a market for art investors being eager to first mint a piece of art they like. +🎢 **Music Player**: A full-featured on-chain music player that supports playlists, song likes, and playback on mobile and desktop via our PWA. Ads play for users streaming music they don’t own, providing additional income for artists. -The complete cost for first minters consists in the price of 1 NFT plus the gas costs of the deployment transaction. The marketplace collects 5% of each first mint price. +🌐 **Cross-Chain NFTs**: Seamless cross-chain NFT transfers using Chainlink's CCIP, allowing artists to extend their reach and access new markets. -βœ… **Royalties**: Artists have an option to set a royalty. This royalty is paid to the artist every time the NFT is sold through a market that supports the royalty standard, creating a passive income stream for artists. +πŸͺ„Β **Token Gated Content**: NFT holders get exclusive access to perks like backstage passes, special events, and live event rewards. -In the case of Simple Mint, the first minter of a collection gets a share of the royalties of all the NFTs minted in that collection. +πŸ“¦Β **Batch Buying**: A cost-saving feature that allows users to purchase multiple NFTs in a single transaction, reducing gas fees. -πŸ“ˆ **Royalty and Revenue Tracking**: Let artists track their royalties, sales, and revenue in an easy-to-understand interface. +πŸ”’Β **Web 2.5 Login**: Users can create profiles using familiar Web2 accounts like Twitter, Google, or Instagram, making onboarding easier. This auto-generates a crypto wallet for seamless interaction with the marketplace. -🌐 **Cross-Chain NFTs**: We allow artists and collectors to easily bridge their NFTs between blockchains, and thus access other marketplaces. We offer this functionality for NFTs minted on our marketplace by leveraging the Chainlink CCIP (Cross-Chain Interoperability Protocol). +🀝 **Social Features**: Build a personal profile, like NFTs, follow artists, message collectors, comment on pieces, and receive notifications about new drops from your favorite creators. -πŸ”„ **Remixing Feature**: Take another artists piece and remix it. Then upload specifying what piece you remixed, and you can be displayed as a remixer artist on the art piece you remixed. The creator of the original piece will receive a percent of the royalties of the remix. +πŸ‘©β€πŸŽ€Β **Artist NFTs (Limited Edition)**: Special artist NFTs that grant holders VIP experiences like backstage access, event invites, and more. -🀝 **Social Features**: You can create your own profile, like NFTs, get notifications on your favorite artists, message with other collectors and artists, comment on NFTs, and much more! +πŸŽ“Β **Educational Content**: A comprehensive onboarding experience, including video tutorials and step-by-step guides, to help users unfamiliar with NFTs, minting, or Web3 get started. + +πŸ“ŠΒ **Artist Dashboards**: Artists can view real-time insights into their NFTs' performance, including views, likes, and plays (for music), giving them deeper analytics into their work. + +πŸ“ˆΒ **Royalty and Revenue Tracking**: A simplified interface for artists to monitor royalties, sales, and overall revenue, providing a clear view of their earnings and growth trajectory. + +## Deployed artifacts + +### Frontend + +### Contracts diff --git a/packages/nextjs/app/myProfile/_components/NFTCard.tsx b/packages/nextjs/app/myProfile/_components/NFTCard.tsx index 64298b6..f49a819 100644 --- a/packages/nextjs/app/myProfile/_components/NFTCard.tsx +++ b/packages/nextjs/app/myProfile/_components/NFTCard.tsx @@ -115,11 +115,20 @@ export const NFTCard = ({ nft }: { nft: Collectible }) => { {/* Tab Content */} {activeTab === "artwork" && ( - // Render all combined content (artwork, info, actions) here
- {/* eslint-disable-next-line */} - NFT Image + {/* Check if image is IPFS or external URL */} + NFT Image
{nft.animation_url && ( diff --git a/packages/nextjs/contracts/deployedContracts.ts b/packages/nextjs/contracts/deployedContracts.ts index 3477d72..cf72a60 100644 --- a/packages/nextjs/contracts/deployedContracts.ts +++ b/packages/nextjs/contracts/deployedContracts.ts @@ -7,7 +7,7 @@ import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; const deployedContracts = { 31337: { SimpleMint: { - address: "0x4bf010f1b9beda5450a8dd702ed602a104ff65ee", + address: "0x70bda08dbe07363968e9ee53d899dfe48560605b", abi: [ { type: "constructor", @@ -320,7 +320,7 @@ const deployedContracts = { }, }, MockNFT: { - address: "0x40a42baf86fc821f972ad2ac878729063ceef403", + address: "0x26b862f640357268bd2d9e95bc81553a2aa81d7e", abi: [ { type: "constructor", @@ -940,7 +940,7 @@ const deployedContracts = { }, }, MockUSDC: { - address: "0x96f3ce39ad2bfdcf92c0f6e2c2cabf83874660fc", + address: "0xa56f946d6398dd7d9d4d9b337cf9e0f68982ca5b", abi: [ { type: "constructor", @@ -1397,7 +1397,7 @@ const deployedContracts = { }, }, Marketplace: { - address: "0x986aaa537b8cc170761fdac6ac4fc7f9d8a20a8c", + address: "0x5d42ebdbba61412295d7b0302d6f50ac449ddb4f", abi: [ { type: "constructor", diff --git a/packages/nextjs/utils/simpleNFT/nftsMetadata.ts b/packages/nextjs/utils/simpleNFT/nftsMetadata.ts index 92a5ddf..ca66a23 100644 --- a/packages/nextjs/utils/simpleNFT/nftsMetadata.ts +++ b/packages/nextjs/utils/simpleNFT/nftsMetadata.ts @@ -6,10 +6,10 @@ const nftsMetadata = [ image: "https://ipfs.io/ipfs/QmdsAeLoVrhu9APcXZuTGfnptgSrty2rfUULr5bqEEotLK", animation_url: "https://ipfs.io/ipfs/QmfF1jkVp339GXh5VtuYF3Kj4wLfKfYieQ8zp47LQWM8RP", attributes: [ - // { - // trait_type: "Artwork", - // value: "abstract", - // }, + { + trait_type: "Artwork", + value: "abstract", + }, { trait_type: "Reproduction Type", value: "mp3", @@ -85,9 +85,9 @@ const nftsMetadata = [ }, // { // description: "So delicate.", - // external_url: "https://austingriffith.com/portfolio/paintings/", // <-- this can link to a page for the specific file too + // // external_url: "https://austingriffith.com/portfolio/paintings/", // <-- this can link to a page for the specific file too // image: "https://austingriffith.com/images/paintings/flamingo.jpg", - // animation_url: "https://ipfs.io/ipfs/QmfF1jkVp339GXh5VtuYF3Kj4wLfKfYieQ8zp47LQWM8RP", + // animation_url: "https://ipfs.io/ipfs/QmfF1jkVp339GXh5VtuYF3Kj4wLfKfYieQ8zp47LQWM8RP", // name: "Flamingo", // attributes: [ // { @@ -106,9 +106,9 @@ const nftsMetadata = [ // }, // { // description: "Raaaar!", - // external_url: "https://austingriffith.com/portfolio/paintings/", // <-- this can link to a page for the specific file too + // // external_url: "https://austingriffith.com/portfolio/paintings/", // <-- this can link to a page for the specific file too // image: "https://austingriffith.com/images/paintings/godzilla.jpg", - // animation_url: "https://ipfs.io/ipfs/QmfF1jkVp339GXh5VtuYF3Kj4wLfKfYieQ8zp47LQWM8RP", + // animation_url: "https://ipfs.io/ipfs/QmfF1jkVp339GXh5VtuYF3Kj4wLfKfYieQ8zp47LQWM8RP", // name: "Godzilla", // attributes: [ // {