← Back to all projects

Client project9 min read

AllYouNeedIsNft - NFT Marketplace Startup

AllYouNeedIsNft - NFT Marketplace Startup

Tech stack

ReactNextJSSolidity.NET CoreGraphQLHot ChocolateNethereumMetaMaskDockerIPFSWebSocketsMicroservicesDDDNFTCryptoProjectFrontendStartup

Services

  • →Co-founding and technical leadership
  • →Frontend architecture and development (Next.js)
  • →Ethereum smart contract integration (Solidity + ethers.js)
  • →Wallet authentication UX (MetaMask, WalletConnect)
  • →Product planning, roadmap, and engineering hiring

Deliverables

  • ✓Live NFT marketplace, token listing, buying, and selling on Ethereum mainnet
  • ✓Creator and collection profile pages with SEO-optimised routes
  • ✓Wallet onboarding flow designed for non-crypto-native users
  • ✓MVP shipped in 3 months from zero lines of code

Challenge

Co-founded AllYouNeedIsNft at a moment when NFT marketplaces were exploding but the space was dominated by OpenSea. The window to enter was narrow: ship a working marketplace fast, differentiate on UX, and establish creator relationships before the market cooled. The technical challenge was real, blockchain integration, smart contract security, wallet authentication, and a consumer-grade frontend all had to be built from scratch by a small team with no existing codebase.

Discovery

Early conversations with artists and collectors surfaced a consistent complaint about existing platforms: confusing wallet flows, poor mobile experience, and no support for emerging creators. The opportunity was a marketplace that felt as simple as an e-commerce store while hiding the blockchain complexity underneath.

Options Considered

  1. Fork OpenSea's open-source contracts, evaluated. Used as reference but not forked directly; business logic required custom royalty and auction mechanics.
  2. Use a marketplace-as-a-service (e.g. Rarible Protocol): rejected. Too much lock-in; fee structure wasn't viable for the target creator segment.
  3. Custom Solidity contracts + Next.js frontend: chosen. Full control over contract logic, gas optimisation, and UX.

Decision

Next.js for the frontend (SSR for SEO on collection pages), Solidity for the marketplace and royalty contracts on Ethereum, ethers.js for wallet interaction. MetaMask and WalletConnect covered the two dominant wallet surfaces. Architecture decisions were made with MVP speed as the top constraint, extensibility second.

‹›
aA🔒www.allyouneedisnft.com/
⇧▢+
Home

allyouneedisnft.com, scrollable snapshot of the live marketplace

Implementation

Led the entire frontend architecture: routing, wallet connection flow, contract interaction layer, and collection/token pages. The wallet auth flow was a particular UX challenge. It had to work for users who had never touched crypto. Designed a step-by-step onboarding modal that walked new users through installing MetaMask and connecting without leaving the page.

Behind the marketplace sat a custom indexing engine that talked to the chain directly through the Nethereum library. It pulled token data on-chain, read the metadata JSON for ERC-1155, ERC-721 and several other formats, and stored collection attributes in a local database. Images were fetched from IPFS and rescaled to the sizes the site actually renders, so collection pages never dragged down full-resolution originals.

Caching worked as lazy load: a collection got indexed the first time someone opened it, on demand, instead of crawling the whole chain up front. Indexing progress was pushed to the browser over WebSockets and shown as a live progress bar, so a first-time visitor to a large collection could watch it fill in rather than stare at an empty page.

Drove product decisions week-to-week: prioritised the buying and listing flows for MVP, deferred auctions and offers to v2. Onboarded two engineers, defined the branching strategy, and ran weekly demos with co-founders to keep the roadmap honest.

Outcome

MVP shipped in 3 months from zero. First creator collections went live at the peak of NFT market interest. The platform handled real transactions on mainnet with no contract exploits. Served as a strong proof of concept for the team's ability to execute in a fast-moving, technically complex space.

Indexing Engine in Action

Thumbnail Generation

Thumbnails being generated for collection images. The collection downloads in the background as a separate microservice process, so the main site stays responsive while it runs, and the files are laid down on disk as they arrive rather than held in memory or re-fetched per request.

On-Demand Cache

For the site to load fast, I built a custom cache. It pulled the collection JSON from the blockchain, downloaded the images and made resized copies of them. The cache was rebuilt once a day on demand: when someone opened a collection whose cache had expired, the rebuild started, and the fresh cache then went to every user who opened that collection after them.

Rider with DbEntityOnDemandCache open: the method that reads cached entities by key pattern, under the debugger
The on-demand cache in code

On the frontend the cache refresh showed up as a progress bar fed over a WebSocket connection. The collection update ran as a separate background process so it would not hold up the rest of the site, and it wrote its status to the socket as it went. The frontend moved the progress bar forward with each update.

Collection page with the notice Collection cache is out of date and refetching now, and a progress bar filling in
The cache refresh progress bar

When indexing finished, the page showed a reload button, and every item in the collection reloaded with its images already in place. On the backend the progress looked like this: the service logged each token it updated and the completion percentage, and sent every step to the socket listeners.

Collection of 25 items refetching its cache: the progress bar partly filled and item cards still waiting for their images
Backend log: the token service updating tokens one by one with the completion percentage and sending each step to socket listeners

The refresh on the page and in the backend log

Nethereum and Domain-Driven Design

The backend talked to the blockchain through Nethereum, a .NET library for Ethereum. The screenshot shows a new NFT item being created from its metadata, with a wrapper around it built on a generic type so the same code serves different token kinds. The whole project followed Domain-Driven Design and was split into layers: the domain with the business entities and processes, infrastructure for the database and the blockchain, and the application layer on top.

Rider debugger in the generic Web3TokenService: an NFT token created from IPFS metadata via TNftToken.Create
Creating an NFT item through the generic token service

GraphQL on Hot Chocolate

The backend was built on GraphQL, a progressive technology at the time, using the Hot Chocolate library. On top of it sat a set of SQL tricks: lazy loading of specific fields, and a cache rebuild triggered when a particular field inside a projection object was requested.

Rider debug console: the Hot Chocolate GraphQL pipeline serving a request and the SQL query it generated for smart contracts
A GraphQL request and the SQL behind it

Collections, Day by Day

A few intermediate stages of the collections page. New collections were added to the site every day, and each snapshot shows the catalogue a little further along.

Collections page on Fantom: Underside, Littleshit, Elon we got the project, Vanilla Sunrise and Mood shop
A later stage of the collections page with the new What a Wonderful Arts collection highlighted

Two stages of the collections page

Backend on .NET Core

This is what the AllYouNeedIsNFT backend looked like. It all ran on .NET Core, so most of the development happened in JetBrains Rider. The solution sat in a monorepo next to shared packages, and each service was built into a Docker image.

JetBrains Rider with the AYNN.Application solution: apps and shared packages in a monorepo, and a Docker build of the service in the terminal

The backend solution in Rider

Wallet Sign-In

To confirm that a user really owns the wallet address they claim, we built a custom authentication flow. The site asks the user to sign an arbitrary message that carries a one-time security token, and the backend then verifies the signature. A valid signature proves the person holds the signing rights for that exact address, so there is no room for doubt about who they are.

The screenshots below catch the signature check under the debugger: the service recovers the address from the signed message, and the handler compares it with the address the user claimed.

AYNN sign-in with a MetaMask signature request: a message with the terms of service and a one-time nonce
Rider debugger stopped in Web3Service.EcRecover: the address recovered from the signed login message
Rider debugger in the Web3 auth confirm handler: the recovered address matches the claimed one

Sign-in request and the signature check under the debugger

Admin Panel

The site also got an admin panel. An author could manage their own collections and settings there, and a global administrator could manage collections and settings for other users.

Admin panel: navigation for contracts, collections, mint sites, canvases and docs, and a user table with addresses, roles and edit actions
The admin panel

A short overview of the platform's admin interface.

Mobile Bug Fixing

Bug fixing in the mobile version. The marketplace had a lot of functionality, so there were plenty of bugs too: long wallet addresses overflowing their fields, controls overlapping on narrow screens. Each flow was checked on a phone against the Sepolia testnet, down to creating a Seaport listing.

Mobile token page on the Sepolia testnet: a long owner address overflowing the card, a bug caught during mobile testing
Mobile marketplace after creating a Seaport listing, with the success notice for one new order

Mobile testing on the Sepolia testnet

The Listing Form

A walkthrough of how to use the listing form on allyouneedisnft.com.

The Transfer Form

A walkthrough of the form for transferring the rights to a collection item on our platform.

NFT Drops

A review of how an NFT drop is created, one more feature on the site. It used a dedicated contract, and during the event anyone could get a random item from the collection for free.

The event itself is similar to an AMA. It starts with a warm-up, a Discord channel is created and hosts are assigned. During the event there are contests, the guests talk to each other, a host leads it all, and giveaways and sales of the collection happen along the way.

NFT Uniqueness Service

A third-party developer built a service that checks NFT images for uniqueness and originality, unique.allyouneedisnft.com. The screenshot shows its home page.

unique.allyouneedisnft.com home page on a tablet: Show the world your authenticity, an NFT uniqueness verification service with a check button
The uniqueness service home page

Sometimes I had to record videos presenting new features and projects for our English-speaking audience. The video shows one of them: a presentation of the service that checks NFT images for uniqueness against a database collected from various sites, OpenSea and others.

Within the uniqueness work, the service itself was built by that third-party developer, and the following specification was agreed with him. After that I supervised the delivery and integrated the solution into the main site.

AllYouNeedIsNFT, image uniqueness module specification (in Russian)Download PDF
Loading…

NFTwitting: Teaching Artists NFTs

To teach people how to work with NFTs, we launched a companion project, NFTwitting. It got a Telegram bot and its own ad campaign. In the bot a visitor could pick up a gift, subscribe to updates and join the club, and we collected their data to warm them up and follow up with a sale. The campaign was aimed at artists, to show them how to work with NFTs and earn from them.

VK ad for the closed NFT club at nftwitting.com: Are you a digital artist and want to get into NFTs, with a neon cyberpunk illustration
NFTwitting Telegram bot greeting a user, offering a gift and inviting them to the NFTwitting Club group, username hidden

The ad campaign for artists and the bot it led to

As part of AllYouNeedIsNFT we also grew an NFT club that taught artists to work with NFTs, talk to clients and sell their work on the well-known NFT platforms. The video is an ad for what we teach in our group.

Educational Videos for Clients

Working with clients, I often had to answer their questions. When a question came up especially often, I set aside time for it: wrote a script, recorded the video and the voiceover. The goal was educational, to bring more people into NFTs and introduce them to crypto.

This video is an example: a walkthrough of creating a wallet on the well-known Binance exchange and of working with USDT.

Another video from my educational series helps people who have never worked with crypto understand what USDT TRC-20 is and how to use it. Viewers set up the TronLink browser extension, create a wallet and make their first transfer.

Founders' Calls

Founders' calls: regular status updates and meetups where each of us shared what they had run into, what the next plan was, where we were heading and what we had already achieved.

Telegram founders call with five participants, everyone except me blurred
A founders call

Projects

Posts

Open for contract collaboration

I am available for contract-based collaboration. If you have an interesting project idea, schedule a call via Calendly.

Schedule a 30-min call