Developing a Mobile NFT Marketplace App
An NFT marketplace on mobile is an app with a token gallery, collection screens, buying and selling via smart contracts, Web3 wallet integration. Unlike regular e-commerce, every action requires a transaction signature — fundamentally different UX. Users don't click "Buy" — they sign a transaction in a wallet. Explain this process clearly without losing conversions.
Stack: Web3 on Mobile
Two approaches to Web3 integration:
1. Native SDK. For iOS — web3.swift or Web3Core. For Android — web3j. Full control, native performance, but more code handling ABI and smart contract events.
2. WalletConnect v2 + WebView/React Native. Faster path, especially if the team knows Web3/React Native. WalletConnect v2 (sign protocol) works via QR or deep link — connects external wallets (MetaMask Mobile, Trust Wallet, Rainbow).
For a full marketplace, choice depends on priorities. Native SDK gives better UX — no need to switch to a third-party wallet for every signature. WalletConnect is faster to develop.
NFT Catalog: Loading Metadata
NFT metadata lives on IPFS or centralized storage. URI is available via tokenURI(tokenId) in ERC-721. Problem: IPFS gateways are slow; loading 100 collection tokens in parallel via IPFS can take 10–30 seconds.
// Android — caching NFT metadata with Coil + OkHttp
val imageLoader = ImageLoader.Builder(context)
.memoryCache {
MemoryCache.Builder(context)
.maxSizePercent(0.25) // 25% RAM
.build()
}
.diskCache {
DiskCache.Builder()
.directory(context.cacheDir.resolve("nft_images"))
.maxSizeBytes(500L * 1024 * 1024) // 500 MB
.build()
}
.okHttpClient {
OkHttpClient.Builder()
.addInterceptor(IpfsGatewayInterceptor()) // replaces ipfs:// with https://
.build()
}
.build()
IpfsGatewayInterceptor intercepts URIs like ipfs://Qm... and substitutes a fast gateway — Cloudflare (cloudflare-ipfs.com), NFT.storage, or self-hosted. Add fallback: if the first gateway doesn't respond in 3 seconds, try the next.
For collections with thousands of tokens, don't load metadata directly from blockchain. Use an indexer: The Graph, Alchemy NFT API, Moralis, OpenSea API. They already aggregated metadata — response time 50–200 ms instead of 10+ seconds.
Collections and User Profile
Collection screen: token grid (2–3 columns), trait filters, sort by price/rarity. Infinite scroll with prefetching — load next page at 70%. Placeholder skeleton animations while images load.
User profile: NFT list in wallet (via Alchemy getNFTsForOwner or OpenSea account/:address/nfts), active listings, purchase history.
Buying NFT: Transaction Flow
1. User clicks "Buy"
2. App calls marketplace smart contract function:
marketplace.buyItem(nftContract, tokenId, { value: price })
3. WalletConnect sends signature request to wallet
4. User confirms in wallet
5. App awaits transaction confirmation (waitForTransaction)
6. Updates UI: NFT now owned by buyer
Step 5 is critical for UX. Transaction may confirm in 15 seconds or 5 minutes (network congestion). Don't block users with a spinner: show TransactionHash as a link to Explorer, "Awaiting confirmation" indicator, and let them leave — send push on confirmation.
Creating Listings, Auctions, Offers
Three sale mechanics, each with smart contract flow:
Fixed Price: approve(marketplaceContract, tokenId) + listItem(price). Two transactions.
Auction (English Auction): create with minimum price and deadline, place bids (placeBid), auto-award winner at end.
Offers: buyer makes offer via ERC-20 permit or approve + makeOffer. Seller accepts via acceptOffer.
Royalties and Standards
ERC-2981 is the royalty standard at smart contract level. Call royaltyInfo(tokenId, salePrice) returns recipient address and royalty amount. Marketplace must account for this when calculating total and showing users: "X% of this sum goes to creator royalties."
Development Timeline
| Component | Timeline |
|---|---|
| Wallet (WalletConnect v2 / embedded) | 1 week |
| Catalog with IPFS, pagination, filters | 1–2 weeks |
| User profile: NFT list | 1 week |
| Fixed Price buy/sell | 1.5 weeks |
| Auctions | 1.5 weeks |
| Offers | 1 week |
| Search and trait filters | 1 week |
MVP with catalog, fixed-price buying, profile: 6–8 weeks. Full marketplace with auctions, offers, collections, ratings: 2–3 months.







