How I Integrated NFTs into MyZubster with Thirdweb SDK
The Vision
MyZubster is a self-hosted Monero payment gateway and skills marketplace. I wanted to add a new layer of value: NFTs as proof of skill verification.
When a user completes a service on MyZubster, they receive an NFT that certifies their skill. This creates a verifiable, on-chain record of their expertise.
Why NFTs?
- β Verifiable β Anyone can check the authenticity of the NFT
- β Portable β The user owns the NFT, not the platform
- β Immutable β Cannot be altered or removed
- β Collectible β Users can build a portfolio of verified skills
The Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NFT INTEGRATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββββββ β
β β Monero β β Gateway β β Marketplace β β
β β Payment ββββΆβ (Order ββββΆβ (Skill β NFT β β
β β (XMR) β β creates β β minting) β β
β βββββββββββββββ βββββββββββββββ ββββββββββββ¬βββββββββββββββ β
β β β
β ββββββββββββββ΄βββββββββββββ β
β β β β
β βΌ βΌ β
β βββββββββββββββββββββββ βββββββββββββββββββ β
β β Blockchain β β Wallet β β
β β (Polygon) β β (Admin) β β
β βββββββββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
text
Tech Stack
| Component | Technology |
|---|---|
| Blockchain | Polygon (Ethereum L2) |
| NFT SDK | Thirdweb SDK |
| Smart Contract | ERC-1155 (multi-token standard) |
| Backend | Node.js + Express |
| Frontend | React Native (Android) |
| Payment | Monero (XMR) |
How It Works
1. Skill Completion
When a user completes a service on MyZubster, the system triggers the NFT minting process.
2. NFT Minting
The backend calls Thirdweb SDK to mint an NFT:
javascript
// services/nftService.js
const mintSkillNFT = async (userId, skillName, metadata) => {
const sdk = getSDK();
const contract = await sdk.getContract(CONTRACT_ADDRESS);
const nftMetadata = {
name: `MyZubster Skill: ${skillName}`,
description: `Certificato di competenza verificata su MyZubster`,
attributes: [
{ trait_type: 'User ID', value: userId },
{ trait_type: 'Skill', value: skillName },
{ trait_type: 'Platform', value: 'MyZubster' }
]
};
const { id } = await contract.erc1155.mint({
metadata: nftMetadata,
to: metadata.walletAddress,
supply: 1
});
return { success: true, tokenId: id };
};
3. NFT Collection
Users can view their NFT collection in the mobile app:
javascript
// app/screens/NFTCollectionScreen.js
const loadNFTs = async () => {
const walletAddress = user?.walletAddress;
const nfts = await getUserNFTs(walletAddress);
setNfts(nfts);
};
4. NFT Verification
Anyone can verify the authenticity of an NFT:
javascript
// Verify NFT ownership
const hasNFT = await verifyNFTOwnership(walletAddress, tokenId);
// Returns true or false
The NFT Contract
I used Thirdweb to deploy an ERC-1155 contract on Polygon.
Why ERC-1155?
β
Supports multiple token types (semi-fungible)
β
Efficient batch transfers
β
Can represent different skill levels
Key features of the contract:
Minting controlled by the marketplace owner
Metadata stored on IPFS via Thirdweb
Each skill has a unique token ID
API Endpoints
Method Endpoint Description
POST /api/nft/mint Mint an NFT for a completed skill
POST /api/nft/verify Verify NFT ownership
GET /api/nft/user/:wallet Get all NFTs owned by a user
Mobile App Screens
The mobile app now includes an NFT Collection screen:
π¨ Displays all NFTs owned by the user
π Shows skill name, description, and token ID
π One-click minting for completed skills
Why Polygon?
Polygon is the perfect network for this integration:
Low fees β Almost zero transaction costs
Fast β Near-instant finality
Ecosystem β Fully compatible with Ethereum tools
Environmental β Low carbon footprint
The Business Model
NFTs create new revenue opportunities:
Minting fees β Charge a small fee for minting NFTs
Verified seller badges β Premium NFTs for verified sellers
Marketplace trading β Users can trade skill NFTs
Skill portfolios β Users build verified skill portfolios
What's Next?
π NFT Marketplace β Buy and sell skill NFTs
π Achievement NFTs β Gamify the platform with achievement badges
π Event NFTs β NFT tickets for platform events
π Tari Integration β Native Monero NFTs when Tari launches
Code Repository
All code is open source on GitHub:
MyZubster β Main repository
MyZubsterGateway β Core Monero payment gateway
MyZubster-Marketplace β Marketplace with NFT integration
MyZubster-App β Android app with NFT Collection
Final Thoughts
Integrating NFTs into MyZubster was a natural evolution. It adds value for users, creates new revenue streams, and makes the platform more engaging.
The combination of Monero payments + NFT skill verification creates a unique value proposition:
π° Monero β Private, borderless payments
π¨ NFTs β Verifiable, portable skill proof
π PGP β Cryptographic order verification
π§
Tor β Anonymous marketplace access
The future is decentralized, private, and verifiable.
Built with β€οΈ for the Monero and Web3 communities.








