← Work

Dwight Club

Proof of concept Ethereum turn-based play-to-earn NFT game. Mint a hero character, battle Dwight Schrute, and watch your NFT's on-chain metadata evolve with each fight. Chainlink VRF for verifiable randomness, IPFS for image storage, deployed to Rinkeby testnet.

ReactSolidityIPFSChainlinkNetlifyEthereum

The Project

We wanted to understand how Web3 play-to-earn games work, so we built one. Dwight Club is a proof of concept turn-based NFT game on Ethereum where a user mints one of three hero characters to battle the evil boss Dwight Schrute.

Once minted, the character NFT lives on-chain with its associated metadata — HP, attack damage, battle history. Image assets are stored on IPFS. Each character comes with different HP and attack damage ratings. Land a punch and Dwight's HP drops. Take a hit and yours does. Every change is recorded on-chain and the NFT's metadata updates accordingly.

Chainlink VRF (Verifiable Random Function) provided provably fair randomness for the turn-based combat — every outcome verifiably random and tamper-proof. The contract was funded with test LINK to pay Chainlink oracle fees.

As a proof of concept, the game was deployed to the Rinkeby testnet rather than Ethereum mainnet — only test ETH needed for gas, and a MetaMask wallet to connect.

Dwight Club landing page — connect wallet to battle Dwight Schrute in this turn-based NFT game
Dwight Club — 1st rule: you do not talk about Dwight Club

Features

Dwight Club mint screen — choose from three hero characters, each with different HP and attack stats

Mint Your Hero NFT To Battle Dwight

Choose your hero wisely — Powerpuff Girl, Miyagi Sensei, or Hat Hat. Each has different HP and attack damage ratings.

Dwight Club battle screen — hero character facing Dwight Schrute with HP bars, attack button, and leaderboard

Prepare For Battle

The battle arena — your hero faces Dwight Schrute. HP bars, attack damage stats, and the leaderboard tracking all fighters.

Dwight Club attack authorisation — MetaMask wallet confirmation for an on-chain attack transaction

Wallet Authorisation For Attack On Dwight

Every attack is an on-chain transaction — wallet authorisation required before landing a punch on Dwight.

Dwight Club battle result — success message showing double damage hit, HP updated on-chain

Success Message And Data Updated On Chain

BAM! Your hit caused double damage. Dwight's HP drops, your stats update — all recorded on-chain via Chainlink VRF.

OpenSea listing for a minted Dwight Club hero NFT — showing metadata, levels, attack damage, and health points

OpenSea: Minted NFT Hero Metadata

The minted hero NFT on OpenSea — metadata reflects on-chain state: attack damage, damage inflicted, and health points.

Etherscan showing the Dwight Club smart contract transactions on Rinkeby testnet

Etherscan: Dwight Club Contract

The smart contract on Etherscan — every mint, attack, and Chainlink VRF callback visible on-chain.

ReactSolidityIPFSChainlinkNetlifyEthereum