{"id":"b2d5ab10-7aa1-474b-b015-6eb636e33c97","shortId":"RZUmFQ","kind":"skill","title":"nft-standards","tagline":"Master ERC-721 and ERC-1155 NFT standards, metadata best practices, and advanced NFT features.","description":"# NFT Standards\n\nMaster ERC-721 and ERC-1155 NFT standards, metadata best practices, and advanced NFT features.\n\n## Do not use this skill when\n\n- The task is unrelated to nft standards\n- You need a different domain or tool outside this scope\n\n## Instructions\n\n- Clarify goals, constraints, and required inputs.\n- Apply relevant best practices and validate outcomes.\n- Provide actionable steps and verification.\n- If detailed examples are required, open `resources/implementation-playbook.md`.\n\n## Use this skill when\n\n- Creating NFT collections (art, gaming, collectibles)\n- Implementing marketplace functionality\n- Building on-chain or off-chain metadata\n- Creating soulbound tokens (non-transferable)\n- Implementing royalties and revenue sharing\n- Developing dynamic/evolving NFTs\n\n## ERC-721 (Non-Fungible Token Standard)\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/utils/Counters.sol\";\n\ncontract MyNFT is ERC721URIStorage, ERC721Enumerable, Ownable {\n    using Counters for Counters.Counter;\n    Counters.Counter private _tokenIds;\n\n    uint256 public constant MAX_SUPPLY = 10000;\n    uint256 public constant MINT_PRICE = 0.08 ether;\n    uint256 public constant MAX_PER_MINT = 20;\n\n    constructor() ERC721(\"MyNFT\", \"MNFT\") {}\n\n    function mint(uint256 quantity) external payable {\n        require(quantity > 0 && quantity <= MAX_PER_MINT, \"Invalid quantity\");\n        require(_tokenIds.current() + quantity <= MAX_SUPPLY, \"Exceeds max supply\");\n        require(msg.value >= MINT_PRICE * quantity, \"Insufficient payment\");\n\n        for (uint256 i = 0; i < quantity; i++) {\n            _tokenIds.increment();\n            uint256 newTokenId = _tokenIds.current();\n            _safeMint(msg.sender, newTokenId);\n            _setTokenURI(newTokenId, generateTokenURI(newTokenId));\n        }\n    }\n\n    function generateTokenURI(uint256 tokenId) internal pure returns (string memory) {\n        // Return IPFS URI or on-chain metadata\n        return string(abi.encodePacked(\"ipfs://QmHash/\", Strings.toString(tokenId), \".json\"));\n    }\n\n    // Required overrides\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 tokenId,\n        uint256 batchSize\n    ) internal override(ERC721, ERC721Enumerable) {\n        super._beforeTokenTransfer(from, to, tokenId, batchSize);\n    }\n\n    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {\n        super._burn(tokenId);\n    }\n\n    function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) {\n        return super.tokenURI(tokenId);\n    }\n\n    function supportsInterface(bytes4 interfaceId)\n        public\n        view\n        override(ERC721, ERC721Enumerable)\n        returns (bool)\n    {\n        return super.supportsInterface(interfaceId);\n    }\n\n    function withdraw() external onlyOwner {\n        payable(owner()).transfer(address(this).balance);\n    }\n}\n```\n\n## ERC-1155 (Multi-Token Standard)\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract GameItems is ERC1155, Ownable {\n    uint256 public constant SWORD = 1;\n    uint256 public constant SHIELD = 2;\n    uint256 public constant POTION = 3;\n\n    mapping(uint256 => uint256) public tokenSupply;\n    mapping(uint256 => uint256) public maxSupply;\n\n    constructor() ERC1155(\"ipfs://QmBaseHash/{id}.json\") {\n        maxSupply[SWORD] = 1000;\n        maxSupply[SHIELD] = 500;\n        maxSupply[POTION] = 10000;\n    }\n\n    function mint(\n        address to,\n        uint256 id,\n        uint256 amount\n    ) external onlyOwner {\n        require(tokenSupply[id] + amount <= maxSupply[id], \"Exceeds max supply\");\n\n        _mint(to, id, amount, \"\");\n        tokenSupply[id] += amount;\n    }\n\n    function mintBatch(\n        address to,\n        uint256[] memory ids,\n        uint256[] memory amounts\n    ) external onlyOwner {\n        for (uint256 i = 0; i < ids.length; i++) {\n            require(tokenSupply[ids[i]] + amounts[i] <= maxSupply[ids[i]], \"Exceeds max supply\");\n            tokenSupply[ids[i]] += amounts[i];\n        }\n\n        _mintBatch(to, ids, amounts, \"\");\n    }\n\n    function burn(\n        address from,\n        uint256 id,\n        uint256 amount\n    ) external {\n        require(from == msg.sender || isApprovedForAll(from, msg.sender), \"Not authorized\");\n        _burn(from, id, amount);\n        tokenSupply[id] -= amount;\n    }\n}\n```\n\n## Metadata Standards\n\n### Off-Chain Metadata (IPFS)\n\n```json\n{\n  \"name\": \"NFT #1\",\n  \"description\": \"Description of the NFT\",\n  \"image\": \"ipfs://QmImageHash\",\n  \"attributes\": [\n    {\n      \"trait_type\": \"Background\",\n      \"value\": \"Blue\"\n    },\n    {\n      \"trait_type\": \"Rarity\",\n      \"value\": \"Legendary\"\n    },\n    {\n      \"trait_type\": \"Power\",\n      \"value\": 95,\n      \"display_type\": \"number\",\n      \"max_value\": 100\n    }\n  ]\n}\n```\n\n### On-Chain Metadata\n\n```solidity\ncontract OnChainNFT is ERC721 {\n    struct Traits {\n        uint8 background;\n        uint8 body;\n        uint8 head;\n        uint8 rarity;\n    }\n\n    mapping(uint256 => Traits) public tokenTraits;\n\n    function tokenURI(uint256 tokenId) public view override returns (string memory) {\n        Traits memory traits = tokenTraits[tokenId];\n\n        string memory json = Base64.encode(\n            bytes(\n                string(\n                    abi.encodePacked(\n                        '{\"name\": \"NFT #', Strings.toString(tokenId), '\",',\n                        '\"description\": \"On-chain NFT\",',\n                        '\"image\": \"data:image/svg+xml;base64,', generateSVG(traits), '\",',\n                        '\"attributes\": [',\n                        '{\"trait_type\": \"Background\", \"value\": \"', Strings.toString(traits.background), '\"},',\n                        '{\"trait_type\": \"Rarity\", \"value\": \"', getRarityName(traits.rarity), '\"}',\n                        ']}'\n                    )\n                )\n            )\n        );\n\n        return string(abi.encodePacked(\"data:application/json;base64,\", json));\n    }\n\n    function generateSVG(Traits memory traits) internal pure returns (string memory) {\n        // Generate SVG based on traits\n        return \"...\";\n    }\n}\n```\n\n## Royalties (EIP-2981)\n\n```solidity\nimport \"@openzeppelin/contracts/interfaces/IERC2981.sol\";\n\ncontract NFTWithRoyalties is ERC721, IERC2981 {\n    address public royaltyRecipient;\n    uint96 public royaltyFee = 500; // 5%\n\n    constructor() ERC721(\"Royalty NFT\", \"RNFT\") {\n        royaltyRecipient = msg.sender;\n    }\n\n    function royaltyInfo(uint256 tokenId, uint256 salePrice)\n        external\n        view\n        override\n        returns (address receiver, uint256 royaltyAmount)\n    {\n        return (royaltyRecipient, (salePrice * royaltyFee) / 10000);\n    }\n\n    function setRoyalty(address recipient, uint96 fee) external onlyOwner {\n        require(fee <= 1000, \"Royalty fee too high\"); // Max 10%\n        royaltyRecipient = recipient;\n        royaltyFee = fee;\n    }\n\n    function supportsInterface(bytes4 interfaceId)\n        public\n        view\n        override(ERC721, IERC165)\n        returns (bool)\n    {\n        return interfaceId == type(IERC2981).interfaceId ||\n               super.supportsInterface(interfaceId);\n    }\n}\n```\n\n## Soulbound Tokens (Non-Transferable)\n\n```solidity\ncontract SoulboundToken is ERC721 {\n    constructor() ERC721(\"Soulbound\", \"SBT\") {}\n\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 tokenId,\n        uint256 batchSize\n    ) internal virtual override {\n        require(from == address(0) || to == address(0), \"Token is soulbound\");\n        super._beforeTokenTransfer(from, to, tokenId, batchSize);\n    }\n\n    function mint(address to) external {\n        uint256 tokenId = totalSupply() + 1;\n        _safeMint(to, tokenId);\n    }\n\n    // Burn is allowed (user can destroy their SBT)\n    function burn(uint256 tokenId) external {\n        require(ownerOf(tokenId) == msg.sender, \"Not token owner\");\n        _burn(tokenId);\n    }\n}\n```\n\n## Dynamic NFTs\n\n```solidity\ncontract DynamicNFT is ERC721 {\n    struct TokenState {\n        uint256 level;\n        uint256 experience;\n        uint256 lastUpdated;\n    }\n\n    mapping(uint256 => TokenState) public tokenStates;\n\n    function gainExperience(uint256 tokenId, uint256 exp) external {\n        require(ownerOf(tokenId) == msg.sender, \"Not token owner\");\n\n        TokenState storage state = tokenStates[tokenId];\n        state.experience += exp;\n\n        // Level up logic\n        if (state.experience >= state.level * 100) {\n            state.level++;\n        }\n\n        state.lastUpdated = block.timestamp;\n    }\n\n    function tokenURI(uint256 tokenId) public view override returns (string memory) {\n        TokenState memory state = tokenStates[tokenId];\n\n        // Generate metadata based on current state\n        return generateMetadata(tokenId, state);\n    }\n\n    function generateMetadata(uint256 tokenId, TokenState memory state)\n        internal\n        pure\n        returns (string memory)\n    {\n        // Dynamic metadata generation\n        return \"\";\n    }\n}\n```\n\n## Gas-Optimized Minting (ERC721A)\n\n```solidity\nimport \"erc721a/contracts/ERC721A.sol\";\n\ncontract OptimizedNFT is ERC721A {\n    uint256 public constant MAX_SUPPLY = 10000;\n    uint256 public constant MINT_PRICE = 0.05 ether;\n\n    constructor() ERC721A(\"Optimized NFT\", \"ONFT\") {}\n\n    function mint(uint256 quantity) external payable {\n        require(_totalMinted() + quantity <= MAX_SUPPLY, \"Exceeds max supply\");\n        require(msg.value >= MINT_PRICE * quantity, \"Insufficient payment\");\n\n        _mint(msg.sender, quantity);\n    }\n\n    function _baseURI() internal pure override returns (string memory) {\n        return \"ipfs://QmBaseHash/\";\n    }\n}\n```\n\n## Resources\n\n- **references/erc721.md**: ERC-721 specification details\n- **references/erc1155.md**: ERC-1155 multi-token standard\n- **references/metadata-standards.md**: Metadata best practices\n- **references/enumeration.md**: Token enumeration patterns\n- **assets/erc721-contract.sol**: Production ERC-721 template\n- **assets/erc1155-contract.sol**: Production ERC-1155 template\n- **assets/metadata-schema.json**: Standard metadata format\n- **assets/metadata-uploader.py**: IPFS upload utility\n\n## Best Practices\n\n1. **Use OpenZeppelin**: Battle-tested implementations\n2. **Pin Metadata**: Use IPFS with pinning service\n3. **Implement Royalties**: EIP-2981 for marketplace compatibility\n4. **Gas Optimization**: Use ERC721A for batch minting\n5. **Reveal Mechanism**: Placeholder → reveal pattern\n6. **Enumeration**: Support walletOfOwner for marketplaces\n7. **Whitelist**: Merkle trees for efficient whitelisting\n\n## Marketplace Integration\n\n- OpenSea: ERC-721/1155, metadata standards\n- LooksRare: Royalty enforcement\n- Rarible: Protocol fees, lazy minting\n- Blur: Gas-optimized trading\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["nft","standards","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-nft-standards","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/nft-standards","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (11,521 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:38.380Z","embedding":null,"createdAt":"2026-04-18T21:41:25.630Z","updatedAt":"2026-04-23T06:51:38.380Z","lastSeenAt":"2026-04-23T06:51:38.380Z","tsv":"'-1155':9,26,325,939,960 '-2981':617,991 '-721':6,23,122,934,955,1026 '/1155':1027 '0':190,215,428,729,732 '0.05':890 '0.08':169 '0.8.0':136,338 '1':352,487,749,972 '10':676 '100':516,822 '1000':380,670 '10000':163,386,659,884 '2':357,979 '20':177 '3':362,987 '4':995 '5':633,1003 '500':383,632 '6':1009 '7':1015 '95':510 'abi.encodepacked':249,562,594 'action':74 'address':258,260,321,389,415,455,626,651,662,715,717,728,731,743 'advanc':16,33 'allow':755 'amount':394,400,409,412,422,436,447,452,460,473,476 'appli':66 'application/json':596 'art':92 'ask':1076 'assets/erc1155-contract.sol':957 'assets/erc721-contract.sol':952 'assets/metadata-schema.json':962 'assets/metadata-uploader.py':966 'attribut':495,579 'author':469 'background':498,529,582 'balanc':323 'base':611,843 'base64':576,597 'base64.encode':559 'baseuri':922 'batch':1001 'batchsiz':265,274,722,740 'battl':976 'battle-test':975 'beforetokentransf':257,714 'best':13,30,68,946,970 'block.timestamp':825 'blue':500 'blur':1038 'bodi':531 'bool':310,691 'boundari':1084 'build':98 'burn':276,454,470,753,762,773 'byte':560 'bytes4':302,683 'chain':101,105,245,481,519,570 'clarif':1078 'clarifi':60 'clear':1051 'collect':91,94 'compat':994 'constant':160,166,173,350,355,360,881,887 'constraint':62 'constructor':178,373,634,709,892 'contract':145,343,522,621,705,778,875 'counter':152 'counters.counter':154,155 'creat':89,107 'criteria':1087 'current':845 'data':573,595 'describ':1055 'descript':488,489,567 'destroy':758 'detail':79,936 'develop':118 'differ':52 'display':511 'domain':53 'dynam':775,863 'dynamic/evolving':119 'dynamicnft':779 'effici':1020 'eip':616,990 'enforc':1032 'enumer':950,1010 'environ':1067 'environment-specif':1066 'erc':5,8,22,25,121,324,933,938,954,959,1025 'erc1155':346,374 'erc721':179,268,281,292,307,525,624,635,688,708,710,781 'erc721a':871,878,893,999 'erc721a/contracts/erc721a.sol':874 'erc721enumerable':149,269,308 'erc721uristorage':148,282,293 'ether':170,891 'exampl':80 'exceed':202,403,441,908 'exp':800,815 'experi':787 'expert':1072 'extern':186,316,395,423,461,647,666,745,765,801,901 'featur':18,35 'fee':665,669,672,680,1035 'format':965 'function':97,182,230,256,275,285,300,314,387,413,453,541,599,641,660,681,713,741,761,795,826,851,897,921 'fungibl':125 'gainexperi':796 'game':93 'gameitem':344 'gas':868,996,1040 'gas-optim':867,1039 'generat':609,841,865 'generatemetadata':848,852 'generatesvg':577,600 'generatetokenuri':228,231 'getraritynam':590 'goal':61 'head':533 'high':674 'id':376,392,399,402,408,411,419,434,439,445,451,458,472,475 'identifi':132,334 'ids.length':430 'ierc165':689 'ierc2981':625,695 'imag':493,572 'image/svg':574 'implement':95,113,978,988 'import':137,139,141,143,339,341,619,873 'input':65,1081 'instruct':59 'insuffici':210,916 'integr':1023 'interfaceid':303,313,684,693,696,698 'intern':234,266,279,604,723,858,923 'invalid':195 'ipf':240,483,967,983 'isapprovedforal':465 'json':253,377,484,558,598 'lastupd':789 'lazi':1036 'legendari':505 'level':785,816 'licens':131,333 'limit':1043 'logic':818 'looksrar':1030 'map':363,368,536,790 'marketplac':96,993,1014,1022 'master':4,21 'match':1052 'max':161,174,192,200,203,404,442,514,675,882,906,909 'maxsuppli':372,378,381,384,401,438 'mechan':1005 'memori':238,296,418,421,550,552,557,602,608,835,837,856,862,928 'merkl':1017 'metadata':12,29,106,246,477,482,520,842,864,945,964,981,1028 'mint':167,176,183,194,207,388,406,742,870,888,898,913,918,1002,1037 'mintbatch':414,449 'miss':1089 'mit':133,335 'mnft':181 'msg.sender':224,464,467,640,769,805,919 'msg.value':206,912 'multi':327,941 'multi-token':326,940 'mynft':146,180 'name':485,563 'need':50 'newtokenid':221,225,227,229 'nft':2,10,17,19,27,34,47,90,486,492,564,571,637,895 'nft-standard':1 'nfts':120,776 'nftwithroyalti':622 'non':111,124,702 'non-fung':123 'non-transfer':110,701 'number':513 'off-chain':103,479 'on-chain':99,243,517,568 'onchainnft':523 'onft':896 'onlyown':317,396,424,667 'open':83 'opensea':1024 'openzeppelin':974 'openzeppelin/contracts/access/ownable.sol':142,342 'openzeppelin/contracts/interfaces/ierc2981.sol':620 'openzeppelin/contracts/token/erc1155/erc1155.sol':340 'openzeppelin/contracts/token/erc721/extensions/erc721enumerable.sol':140 'openzeppelin/contracts/token/erc721/extensions/erc721uristorage.sol':138 'openzeppelin/contracts/utils/counters.sol':144 'optim':869,894,997,1041 'optimizednft':876 'outcom':72 'output':1061 'outsid':56 'overrid':255,267,280,291,306,547,649,687,725,832,925 'ownabl':150,347 'owner':319,772,808 'ownerof':767,803 'pattern':951,1008 'payabl':187,318,902 'payment':211,917 'per':175,193 'permiss':1082 'pin':980,985 'placehold':1006 'potion':361,385 'power':508 'practic':14,31,69,947,971 'pragma':134,336 'price':168,208,889,914 'privat':156 'product':953,958 'protocol':1034 'provid':73 'public':159,165,172,289,304,349,354,359,366,371,539,545,627,630,685,793,830,880,886 'pure':235,605,859,924 'qmbasehash':375,930 'qmhash':250 'qmimagehash':494 'quantiti':185,189,191,196,199,209,217,900,905,915,920 'raribl':1033 'rariti':503,535,588 'receiv':652 'recipi':663,678 'references/enumeration.md':948 'references/erc1155.md':937 'references/erc721.md':932 'references/metadata-standards.md':944 'relev':67 'requir':64,82,188,197,205,254,397,432,462,668,726,766,802,903,911,1080 'resourc':931 'resources/implementation-playbook.md':84 'return':236,239,247,294,297,309,311,548,592,606,614,650,655,690,692,833,847,860,866,926,929 'reveal':1004,1007 'revenu':116 'review':1073 'rnft':638 'royalti':114,615,636,671,989,1031 'royaltyamount':654 'royaltyfe':631,658,679 'royaltyinfo':642 'royaltyrecipi':628,639,656,677 'safemint':223,750 'safeti':1083 'salepric':646,657 'sbt':712,760 'scope':58,1054 'servic':986 'setroyalti':661 'settokenuri':226 'share':117 'shield':356,382 'skill':40,87,1046 'skill-nft-standards' 'solid':128,135,330,337,521,618,704,777,872 'soulbound':108,699,711,735 'soulboundtoken':706 'source-sickn33' 'spdx':130,332 'spdx-license-identifi':129,331 'specif':935,1068 'standard':3,11,20,28,48,127,329,478,943,963,1029 'state':811,838,846,850,857 'state.experience':814,820 'state.lastupdated':824 'state.level':821,823 'step':75 'stop':1074 'storag':810 'string':237,248,295,549,556,561,593,607,834,861,927 'strings.tostring':251,565,584 'struct':526,782 'substitut':1064 'success':1086 'super._beforetokentransfer':270,736 'super._burn':283 'super.supportsinterface':312,697 'super.tokenuri':298 'suppli':162,201,204,405,443,883,907,910 'support':1011 'supportsinterfac':301,682 'svg':610 'sword':351,379 'task':43,1050 'templat':956,961 'test':977,1070 'token':109,126,328,700,733,771,807,942,949 'tokenid':157,233,252,263,273,278,284,288,299,544,555,566,644,720,739,747,752,764,768,774,798,804,813,829,840,849,854 'tokenids.current':198,222 'tokenids.increment':219 'tokenst':783,792,794,809,812,836,839,855 'tokensuppli':367,398,410,433,444,474 'tokentrait':540,554 'tokenuri':286,542,827 'tool':55 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'totalmint':904 'totalsuppli':748 'trade':1042 'trait':496,501,506,527,538,551,553,578,580,586,601,603,613 'traits.background':585 'traits.rarity':591 'transfer':112,320,703 'treat':1059 'tree':1018 'type':497,502,507,512,581,587,694 'uint256':158,164,171,184,213,220,232,262,264,277,287,348,353,358,364,365,369,370,391,393,417,420,426,457,459,537,543,643,645,653,719,721,746,763,784,786,788,791,797,799,828,853,879,885,899 'uint8':528,530,532,534 'uint96':629,664 'unrel':45 'upload':968 'uri':241 'use':38,85,151,973,982,998,1044 'user':756 'util':969 'valid':71,1069 'valu':499,504,509,515,583,589 'verif':77 'view':290,305,546,648,686,831 'virtual':724 'walletofown':1012 'whitelist':1016,1021 'withdraw':315 'xml':575","prices":[{"id":"24833104-d408-46b3-9554-f6c123e9a346","listingId":"b2d5ab10-7aa1-474b-b015-6eb636e33c97","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:25.630Z"}],"sources":[{"listingId":"b2d5ab10-7aa1-474b-b015-6eb636e33c97","source":"github","sourceId":"sickn33/antigravity-awesome-skills/nft-standards","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/nft-standards","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:25.630Z","lastSeenAt":"2026-04-23T06:51:38.380Z"}],"details":{"listingId":"b2d5ab10-7aa1-474b-b015-6eb636e33c97","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"nft-standards","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"208246ed3fc2d05b5493e392c0669ad88a1ad0fc","skill_md_path":"skills/nft-standards/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/nft-standards"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"nft-standards","description":"Master ERC-721 and ERC-1155 NFT standards, metadata best practices, and advanced NFT features."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/nft-standards"},"updatedAt":"2026-04-23T06:51:38.380Z"}}