A blockchain-powered endless runner that combines fun gameplay with blockchain education and African culture
๐ฎ Play Live Demo โข ๐ Documentation โข ๐ Deployment Guide โข ๐ Hackathon Submission
Africa has the world's youngest population โ 70% under 30 years old โ yet faces critical challenges:
- High Youth Unemployment: Over 60% in some countries [UNICEF, 2023]
- Limited Blockchain Literacy: Despite growing adoption, misinformation and lack of accessible education prevent many from benefiting
- Unrewarded Gaming: Millions of African gamers play without earning real-world value
- Cultural Underrepresentation: African culture and art remain underrepresented in global gaming ecosystems
The opportunity is massive: Africa's gaming market is projected to reach $1 billion by 2024, with mobile gaming leading the charge.
Mindera Run turns play into empowerment by combining entertainment, education, and economic opportunity:
Subway Surfers-style endless runner with:
- Run, jump, and dodge obstacles through 3 beautiful stages
- Collect coins and power-ups
- Progressive difficulty with African-inspired visuals
Gamified blockchain education:
- Answer questions about Hedera blockchain to advance levels
- Learn about HTS, HSCS, consensus mechanisms, and more
- Knowledge walls that unlock new stages
Real economic value through Hedera:
- QuestCoin Tokens (HTS): Earn 20-100 tokens per stage completion
- NFT Badges: Collect African-inspired achievement NFTs
- Leaderboard Prizes: Top players earn real HBAR rewards
- Trading: Buy, sell, and trade NFTs in the marketplace
- African-inspired art and themes
- Celebrates African identity in Web3
- Elevates African culture into the global blockchain ecosystem
We chose Hedera for its perfect alignment with Africa's needs:
| Feature | Why It Matters for Africa |
|---|---|
| Low Fees | Transactions cost fractions of a cent โ accessible for all income levels |
| Speed | 3-5 second finality โ instant gratification for gamers |
| Sustainability | Carbon-negative network โ essential for climate-conscious African youth [Hedera, 2024] |
| Scalability | 10,000+ TPS โ ready for millions of African gamers |
| Tokenization | Seamless NFT rewards and microtransactions at scale |
- Gamifies blockchain learning for Africa's next generation of builders
- Makes complex concepts accessible through play
- Creates a pipeline of blockchain-literate youth
- Offers income opportunities through token rewards
- Enables NFT trading and digital asset ownership
- Provides real-world value for time spent gaming
- Showcases African art and identity in Web3
- Creates economic opportunities for African artists
- Builds pride and representation in the global blockchain ecosystem
Mindera Run is more than a game โ it's an on-ramp for African youth into Web3, powered by Hedera's fast, fair, and sustainable network.
Revolutionary serverless architecture leveraging Hedera as the backend:
Frontend (Next.js) โ Hedera SDK โ Smart Contracts โ Blockchain
โ
Mirror Node API โ Real-time Data
- Framework: Next.js 15 with TypeScript
- Game Engine: Custom HTML5 Canvas (60fps)
- State Management: Zustand
- Wallet Integration: MetaMask + WalletConnect
- Styling: Tailwind CSS + NES.css (pixel art)
- UI Components: Lucide icons, Framer Motion
- Network: Hedera Testnet/Mainnet
- Smart Contracts: Solidity 0.8.19
- SDK:
@hashgraph/sdkv2.64.5 - Services Used:
- HTS: Fungible tokens (QuestCoin) + NFTs (Badges)
- HSCS: Smart contract for game logic
- HCS: Consensus service for event logging
- Mirror Node: Real-time data queries
- MindoraRunnerFinal.sol: Player registration, score tracking, rewards
- NFTMarketplace.sol: Trading and marketplace (coming soon)
| Stage | Theme | Difficulty | Rewards |
|---|---|---|---|
| ๐ Stage 1: Morning | Golden coins, green landscape | Easy | 20 QuestCoins + Explorer Badge NFT |
| ๐ Stage 2: Sunset | Silver coins, orange/red sky | Medium | 50 QuestCoins + Adventurer Badge NFT |
| ๐ Stage 3: Night | Cyan coins, starry night | Hard | 100 QuestCoins + Master Badge NFT |
- โจ๏ธ Controls: SPACE or UP arrow to jump
- ๐ช Coin Collection: Collect coins for rewards
- ๐ง Obstacles: Dodge spikes, pits, and blocks
- ๐ง Knowledge Walls: Answer Hedera questions to progress
- ๐ Leaderboards: Compete for top scores
- ๐ Achievements: Unlock NFT badges
- ๐ฐ Real HTS token rewards (QuestCoin)
- ๐จ NFT achievement badges with African-inspired art
- ๐ On-chain score tracking and leaderboards
- ๐ Secure wallet integration
- ๐ซ Duplicate reward prevention
- โก Instant transaction confirmation
- Node.js 18+ installed
- MetaMask wallet
- Hedera testnet account with HBAR (Get testnet HBAR)
git clone https://github.com/yourusername/MinderaRun.git
cd MinderaRun# Frontend
cd frontend
npm install
# Scripts (for deployment)
cd ../scripts
npm installCreate frontend/.env.local:
# Hedera Network Configuration
NEXT_PUBLIC_HEDERA_NETWORK=testnet
# Your Hedera Account (Treasury/Operator)
NEXT_PUBLIC_HEDERA_OPERATOR_ID=0.0.YOUR_ACCOUNT_ID
NEXT_PUBLIC_HEDERA_OPERATOR_KEY=YOUR_PRIVATE_KEY
# Smart Contract Address (Deploy first, then add this)
NEXT_PUBLIC_CONTRACT_ADDRESS=0.0.7172114
# HTS Token IDs (Create tokens first, then add these)
NEXT_PUBLIC_QUESTCOIN_TOKEN_ID=0.0.7158216
NEXT_PUBLIC_BADGE_NFT_TOKEN_ID=0.0.7158217
# HCS Topic ID (Optional - for game event logging)
NEXT_PUBLIC_GAME_EVENTS_TOPIC=0.0.6920083
# WalletConnect Project ID (Get from https://cloud.walletconnect.com)
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=YOUR_PROJECT_IDcd scripts
# Create HTS tokens
node createTokens.js
# Create HCS topic for event logging
node createHCSTopic.js
# Setup NFT metadata
node setupNFTMetadata.jscd frontend
npm run devOpen http://localhost:3000 in your browser ๐ฎ
๐ https://mindera-run.vercel.app/
No installation needed - just connect your MetaMask wallet and start playing!
- Connect Wallet: Click "Connect Wallet" and approve with MetaMask
- Register: Enter your username to create your player profile
- Select Stage: Choose from 3 difficulty levels (unlock by completing previous stages)
- Play:
- Press SPACE or UP arrow to jump
- Collect coins and avoid obstacles
- Answer Hedera knowledge questions at walls
- Complete Stage: Reach the end to unlock rewards
- Claim Rewards: Mint your QuestCoin tokens and NFT badges
- Trade: Visit the marketplace to trade NFTs (coming soon)
MinderaRun/
โโโ frontend/ # Next.js application
โ โโโ src/
โ โ โโโ app/ # App router pages
โ โ โโโ components/ # React components
โ โ โ โโโ SimpleGameCanvas.tsx # Game engine (35K lines)
โ โ โ โโโ GameUI.tsx # Main game interface
โ โ โ โโโ ContractManager.tsx # Blockchain interactions
โ โ โ โโโ GameOverModal.tsx # Reward claiming
โ โ โ โโโ QuizModal.tsx # Knowledge questions
โ โ โโโ services/
โ โ โ โโโ hederaService.ts # Hedera SDK integration (54K lines)
โ โ โโโ store/
โ โ โ โโโ gameStore.ts # Zustand state management
โ โ โโโ config/
โ โ โ โโโ contracts.ts # Contract addresses
โ โ โ โโโ abis/ # Contract ABIs
โ โ โโโ hooks/ # Custom React hooks
โ โ โโโ data/
โ โ โโโ questions.ts # Hedera knowledge questions
โ โโโ package.json
โ
โโโ Smart-contract/
โ โโโ MindoraRunnerFinal.sol # Main game contract (264 lines)
โ โโโ NFTMarketplace.sol # NFT marketplace
โ
โโโ scripts/ # Deployment scripts
โ โโโ createTokens.js # Deploy HTS tokens
โ โโโ createHCSTopic.js # Create consensus topic
โ โโโ setupNFTMetadata.js # Setup NFT metadata
โ โโโ nft-metadata/ # NFT metadata files
โ
โโโ Documentation/
โโโ HEDERA_GAME_DOCUMENTATION.md # Complete technical docs
โโโ DEPLOYMENT_GUIDE.md # Step-by-step deployment
โโโ HEDERA_HACKATHON_SUBMISSION.md # Hackathon submission
registerPlayer(string username) // Register new player
getPlayer(address player) // Get player statssaveGameSession( // Save game progress
uint256 stage,
uint256 finalScore,
uint256 coinsCollected,
uint256 questionsCorrect,
bool stageCompleted
)claimTokens(uint256 stage) // Mark tokens as claimed
claimNFT(uint256 stage) // Mark NFT as claimed
isStageCompleted(address, uint256) // Check completion status
areTokensClaimed(address, uint256) // Check token claim status
isNFTClaimed(address, uint256) // Check NFT claim statusgetStageLeaderboard(uint256 stage, uint256 limit) // Stage-specific
getGeneralLeaderboard(uint256 limit) // All stages- No traditional server infrastructure
- Hedera blockchain acts as the backend
- Direct frontend-to-blockchain communication
- Zero server maintenance costs
- Actual HTS tokens (not fake currency)
- NFT achievements with real value
- Tradeable digital assets
- Cross-platform wallet support
- Hedera knowledge questions in gameplay
- Learn while earning
- Gamified blockchain education
- Progressive difficulty
- African-inspired art and themes
- Celebrates African identity
- Economic opportunities for African artists
- Representation in Web3
- Comprehensive error handling
- Duplicate reward prevention
- Secure environment configuration
- Transaction verification
- Real-time data synchronization
- โ Treasury Account Management: Centralized token minting with proper permissions
- โ Duplicate Prevention: Checks existing balances before minting
- โ Separate Claim Tracking: Tokens and NFTs tracked independently
- โ Environment Variables: No hardcoded credentials
- โ Permission Validation: Verifies minting permissions
- โ Input Validation: Comprehensive error handling
- โ Transaction Verification: Waits for blockchain confirmation
- Endless runner gameplay with 3 stages
- HTS token integration (QuestCoin)
- NFT badge system
- Smart contract deployment
- Wallet integration
- Leaderboards
- Knowledge questions
- NFT marketplace for trading
- Mobile app (iOS/Android)
- Multiplayer mode
- Additional stages and themes
- Power-ups and special items
- Social features (friends, clans)
- DeFi integration (staking, liquidity pools)
- Cross-game NFT compatibility
- DAO governance for community decisions
- Tournament system with prize pools
- Educational content partnerships
- Mainnet deployment
We leverage HTS to create a complete token economy within the game:
// Token Creation (scripts/createTokens.js)
const questCoinTx = new TokenCreateTransaction()
.setTokenName("QuestCoin")
.setTokenSymbol("QC")
.setTokenType(TokenType.FungibleCommon)
.setDecimals(2)
.setInitialSupply(1000000)
.setSupplyType(TokenSupplyType.Infinite)
.setTreasuryAccountId(operatorId)
.setSupplyKey(operatorKey);How We Use It:
- Token ID:
0.0.7158216(QuestCoin) - Minting: Treasury account mints tokens when players complete stages
- Distribution: 20 tokens (Stage 1), 50 tokens (Stage 2), 100 tokens (Stage 3)
- Transfers: Tokens transferred directly to player wallets
- Balance Queries: Real-time balance checks via Mirror Node API
// NFT Token Creation
const badgeNFTTx = new TokenCreateTransaction()
.setTokenName("Mindora Runner Badges")
.setTokenSymbol("MRB")
.setTokenType(TokenType.NonFungibleUnique)
.setSupplyType(TokenSupplyType.Infinite)
.setTreasuryAccountId(operatorId)
.setSupplyKey(operatorKey)
.setMetadataKey(operatorKey);How We Use It:
- Token ID:
0.0.7158217(Badge NFTs) - Metadata: Each NFT contains JSON metadata with badge info, stage, and timestamp
- Minting: Unique NFT minted for each stage completion
- African Art: NFTs feature African-inspired designs (Explorer, Adventurer, Master badges)
- Ownership: Players own NFTs in their wallets, can trade in marketplace
// frontend/src/services/hederaService.ts
// Mint QuestCoin tokens
async mintQuestCoins(amount: number, recipientAccountId: string) {
const mintTx = new TokenMintTransaction()
.setTokenId(this.questCoinTokenId)
.setAmount(amount * 100); // 2 decimal places
const mintSubmit = await mintTx.execute(this.client);
// Transfer to player
const transferTx = new TransferTransaction()
.addTokenTransfer(this.questCoinTokenId, this.operatorId, -amount * 100)
.addTokenTransfer(this.questCoinTokenId, recipientAccountId, amount * 100);
await transferTx.execute(this.client);
}
// Mint NFT Badge
async mintNFTBadge(badgeType: string, recipientAccountId: string) {
const metadata = Buffer.from(JSON.stringify({
name: badgeType,
game: "Mindora Runner",
stage: stageNumber,
date: new Date().toISOString(),
culture: "African-inspired"
}));
const nftMintTx = new TokenMintTransaction()
.setTokenId(this.nftTokenId)
.setMetadata([metadata]);
const mintSubmit = await nftMintTx.execute(this.client);
// Transfer NFT to player
const transferTx = new TransferTransaction()
.addNftTransfer(this.nftTokenId, serialNumber, this.operatorId, recipientAccountId);
await transferTx.execute(this.client);
}We use HSCS to store game state and logic on-chain:
// Smart-contract/MindoraRunnerFinal.sol
contract MindoraRunnerFinal {
struct Player {
string username;
bool isRegistered;
uint256 currentStage;
uint256 totalScore;
uint256 inGameCoins;
uint256 questTokensEarned;
uint256 totalGamesPlayed;
uint256 registrationTime;
}
mapping(address => Player) public players;
mapping(uint256 => GameSession[]) public stageLeaderboards;
mapping(address => mapping(uint256 => bool)) public tokensClaimed;
mapping(address => mapping(uint256 => bool)) public nftClaimed;
}How We Use It:
- Contract ID:
0.0.7172114(MindoraRunnerFinal) - Player Registration: On-chain player profiles with username and stats
- Score Tracking: All game sessions stored permanently on blockchain
- Leaderboards: Stage-specific and general leaderboards
- Claim Tracking: Prevents duplicate token/NFT claims
- Reward Calculation: Smart contract calculates token rewards based on stage
// frontend/src/components/ContractManager.tsx
// Register player on-chain
const registerPlayer = async (username: string) => {
const tx = new ContractExecuteTransaction()
.setContractId(contractAddress)
.setGas(100000)
.setFunction('registerPlayer', new ContractFunctionParameters()
.addString(username)
);
await tx.execute(client);
};
// Save game session to blockchain
const saveGameSession = async (stage, score, coins, questions, completed) => {
const tx = new ContractExecuteTransaction()
.setContractId(contractAddress)
.setGas(200000)
.setFunction('saveGameSession', new ContractFunctionParameters()
.addUint256(stage)
.addUint256(score)
.addUint256(coins)
.addUint256(questions)
.addBool(completed)
);
await tx.execute(client);
};
// Query player data from contract
const getPlayer = async (address: string) => {
const query = new ContractCallQuery()
.setContractId(contractAddress)
.setGas(50000)
.setFunction('getPlayer', new ContractFunctionParameters()
.addAddress(address)
);
const result = await query.execute(client);
return decodePlayerData(result);
};We use HCS for transparent game event logging:
// scripts/createHCSTopic.js
const topicCreateTx = new TopicCreateTransaction()
.setTopicMemo("Mindora Runner Game Events")
.setAdminKey(operatorKey)
.setSubmitKey(operatorKey);
// Log game events
const logEvent = async (eventData) => {
const message = JSON.stringify({
event: "stage_completed",
player: playerAddress,
stage: stageNumber,
score: finalScore,
timestamp: new Date().toISOString()
});
const messageTx = new TopicMessageSubmitTransaction()
.setTopicId(gameEventsTopic)
.setMessage(message);
await messageTx.execute(client);
};How We Use It:
- Topic ID:
0.0.6920083(Game Events) - Event Logging: All major game events logged to HCS
- Transparency: Public verification of achievements
- Anti-Cheat: Immutable proof of game sessions
- Analytics: Query topic messages for game statistics
| Service | Use Case | Benefit |
|---|---|---|
| HTS | Token rewards & NFT badges | Real economic value, true ownership |
| HSCS | Game state & leaderboards | Permanent storage, trustless verification |
| HCS | Event logging | Transparency, anti-cheat, public audit trail |
| Mirror Node | Data queries | Real-time balance checks, NFT ownership |
Our team consists of Hedera-certified blockchain developers passionate about empowering African youth through Web3:
| Team Member | Role | Hedera Certificate |
|---|---|---|
| Ebele Lynda Okolo | Lead Developer & Blockchain Architect | View Certificate |
| Nnenna Okoye | Smart Contract Developer & Game Designer | View Certificate |
| Popoola Ramat | Frontend Developer & UI/UX Designer | View Certificate |
| Akpolo Ogagaoghene | Frontend Developer & Smart Contract Engineer | View Certificate |
- โ Hedera SDK integration (HTS, HSCS, HCS)
- โ Smart contract development (Solidity)
- โ Full-stack Web3 development
- โ Game development and design
- โ African cultural representation in tech
Want to learn more about our vision and business model?
View Our Pitch Deck ๐ฏ
The pitch deck covers:
- Market opportunity in Africa
- Problem-solution fit
- Technical architecture
- Business model and monetization
- Growth strategy and roadmap
- Impact metrics and goals
We welcome contributions from the community! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/AmazingFeature - Commit your changes:
git commit -m 'Add some AmazingFeature' - Push to the branch:
git push origin feature/AmazingFeature - Open a Pull Request
- ๐จ African-inspired art and NFT designs
- ๐ Translations (Swahili, Yoruba, Zulu, etc.)
- ๐ฎ Game level design
- ๐ Educational content creation
- ๐ Bug reports and testing
- ๐ Documentation improvements
- Live Demo: https://mindera-run.vercel.app/
- Documentation: Complete Technical Docs
- Deployment Guide: Step-by-Step Setup
- Issues: GitHub Issues
- Discussions: GitHub Discussions
This project is licensed under the MIT License - see the LICENSE file for details.
- Hedera: For providing the fast, fair, and sustainable blockchain infrastructure
- African Youth: The inspiration and future of this project
- Open Source Community: For the amazing tools and libraries
- Hackathon Organizers: For the opportunity to build and showcase this project
If you find Mindera Run interesting or useful, please consider giving us a star โญ on GitHub. It helps us reach more people and grow the community!
Built with โค๏ธ for African youth and the Hedera ecosystem
Empowering the next generation through play, learning, and earning
๐ฎ Play Now โข ๐ Read the Docs โข ๐ Deploy Your Own