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.
Top comments (0)