A blockchain-based skill tracking system where users mint soul-bound NFTs (SkillPets) that evolve as they complete courses and earn attestations. Skills are tracked across four categories: Development, DeFi, Governance, and Social.
- Project Overview
- Architecture
- Prerequisites
- Quick Start
- Project Structure
- Current Deployment
- Development Workflow
- Key Features
- Environment Setup
- Common Tasks
- Troubleshooting
Credibles is a gamified learning platform that:
- Allows users to mint one soul-bound NFT per wallet (SkillPet)
- Tracks XP across 4 skill categories: Development, DeFi, Governance, Social
- Evolves NFTs from "Egg" β "Baby Dragon" β "Young Dragon" β "Dragon" based on total XP
- Supports daily tasks/quizzes that award XP directly to skill categories
- Integrates with EAS (Ethereum Attestation Service) for course completion attestations
- Features a modern Next.js frontend with light/dark mode support
WorkProof/
βββ blockchain/ # Smart contracts (Hardhat)
β βββ contracts/ # Solidity contracts
β βββ scripts/ # Deployment & utility scripts
β βββ test/ # Contract tests
βββ Credibles/ # Next.js frontend
βββ app/ # Next.js app directory
βββ public/ # Static assets
-
Credibles.sol - Main NFT contract
- ERC721 soul-bound tokens (non-transferable)
- Tracks XP per skill category
- Public minting (one per wallet)
- Direct XP addition for daily tasks
-
AttestationResolver.sol - EAS integration
- Resolves attestations to add XP to NFTs
- Schema:
(uint256 studentId, string category, uint256 xpValue)
- Next.js 15 with App Router
- OnchainKit for wallet integration
- wagmi + viem for blockchain interactions
- TypeScript throughout
Before you begin, ensure you have:
- Node.js 22.10.0 or later (LTS recommended)
node --version # Should be v22.x.x or higher - npm or yarn package manager
- A Base Sepolia wallet with testnet ETH
- Git for version control
- nvm (Node Version Manager) for managing Node versions
- Hardhat account with private key for deployments
- BaseScan API key for contract verification
# Clone the repository
git clone <repository-url>
cd WorkProof
# Install blockchain dependencies
cd blockchain
npm install
# Install frontend dependencies
cd ../Credibles
npm installCreate blockchain/.env:
PRIVATE_KEY=your_private_key_without_0x_prefix
RPC_URL=https://sepolia.base.org
BASESCAN_API_KEY=your_basescan_api_key_optionalThe frontend environment is automatically updated after deployment. If missing, create Credibles/.env.local:
NEXT_PUBLIC_CREDIBLES_CONTRACT_ADDRESS=0x725b47c5fcd4f9dc0d2819ba2682b957499adfa8
NEXT_PUBLIC_ATTESTATION_RESOLVER_ADDRESS=0x307502170787e06efa90fd751c4c625ab5932956
NEXT_PUBLIC_SCHEMA_UID=0x33b404644850244e8b14591c6e561039dfafbf5028fb14daa714361dcb0f9104cd Credibles
npm run devOpen http://localhost:3000 in your browser.
WorkProof/
βββ blockchain/
β βββ contracts/
β β βββ Credibles.sol # Main NFT contract
β β βββ AttestationResolver.sol # EAS resolver
β β βββ IEAS.sol # EAS interface
β β βββ ISchemaRegistry.sol # Schema registry interface
β βββ scripts/
β β βββ deploy.ts # Deploy contracts
β β βββ update-frontend-env.ts # Update frontend env vars
β β βββ test-backend.ts # Test contract connections
β β βββ list-deployments.ts # List deployment history
β β βββ mint.ts # Mint NFT (legacy, use frontend now)
β βββ test/ # Contract tests
β βββ deployments.json # Deployment history
β βββ hardhat.config.ts # Hardhat configuration
β
βββ Credibles/
βββ app/
β βββ page.tsx # Main page component
β βββ layout.tsx # Root layout
β βββ rootProvider.tsx # Wallet provider setup
β βββ page.module.css # Page styles
β βββ globals.css # Global styles
β βββ api/
β β βββ headhunter/
β β βββ route.ts # Headhunter API endpoint
β βββ types/
β βββ contracts.ts # TypeScript contract types
βββ public/ # Static assets
Network: Base Sepolia Testnet
Latest Contracts (Deployed: Dec 4, 2025):
| Contract | Address | Explorer |
|---|---|---|
| Credibles | 0x725b47c5fcd4f9dc0d2819ba2682b957499adfa8 |
BaseScan |
| AttestationResolver | 0x307502170787e06efa90fd751c4c625ab5932956 |
BaseScan |
| Schema UID | 0x33b404644850244e8b14591c6e561039dfafbf5028fb14daa714361dcb0f9104 |
- |
Contract Owner: 0x41b1e204e9c15fF5894bd47C6Dc3a7Fa98C775C7
- Edit contracts in
blockchain/contracts/ - Compile contracts:
cd blockchain npx hardhat compile - Test your changes:
npx hardhat test - Deploy to Base Sepolia:
npx hardhat run scripts/deploy.ts
- Update frontend environment:
npx hardhat run scripts/update-frontend-env.ts
- Restart frontend dev server
- Edit files in
Credibles/app/ - Hot reload - changes appear automatically in dev mode
- Build for production:
cd Credibles npm run build
- Anyone can mint one NFT per wallet
- Auto-assigned token IDs
- Soul-bound (non-transferable)
- 4 Categories: Development, DeFi, Governance, Social
- XP Tracking: Each category tracks XP independently
- Level System: 1 level per 100 XP
- Evolution Stages:
- Egg (0 XP)
- Baby Dragon (100+ XP)
- Young Dragon (300+ XP)
- Dragon (600+ XP)
- Quiz questions per skill category
- 3 attempts per question
- 10 XP awarded for correct answers
- Direct on-chain XP addition
- Course completion attestations
- Automatic XP addition via AttestationResolver
- GraphQL query for user attestations
- Light/dark mode support
- Responsive design
- Real-time XP updates
- Transaction status tracking
PRIVATE_KEY=your_private_key_without_0x
RPC_URL=https://sepolia.base.org # Optional, has default
BASESCAN_API_KEY=your_key # Optional, for verificationNEXT_PUBLIC_CREDIBLES_CONTRACT_ADDRESS=0x...
NEXT_PUBLIC_ATTESTATION_RESOLVER_ADDRESS=0x...
NEXT_PUBLIC_SCHEMA_UID=0x...- Go to Base Sepolia Faucet
- Connect your wallet
- Request testnet ETH
cd blockchain
npm run deployments
# or
npx hardhat run scripts/list-deployments.tscd blockchain
npm run test-backendcd blockchain
npm run deploy
# Automatically updates frontend env after deploymentcd blockchain
npm run verify- Connect wallet on frontend
- Click "Mint Your SkillPet NFT"
- Approve transaction in wallet
- Navigate to Skill Tree section
- Click "Complete Daily Task" on any skill card
- Answer quiz question (3 attempts)
- Earn 10 XP on correct answer
- Go to Base Sepolia EAS Explorer
- Connect wallet
- Create attestation with:
- Schema:
0x33b404644850244e8b14591c6e561039dfafbf5028fb14daa714361dcb0f9104 - Recipient: Your wallet address
- Data: Encode
(uint256 studentId, string category, uint256 xpValue)- Example: Token ID
1, category"dev", XP50
- Example: Token ID
- Schema:
Solution:
cd blockchain
npm run update-frontend
# Then restart frontend dev serverThis is expected - each wallet can only mint one NFT. The contract enforces this.
Fixed in latest deployment! If you still see this:
- Ensure you're using the latest contract address
- Check that
characterStatsis being read correctly - Verify your token ID exists
Error: You are using Node.js 20.x.x which is not supported
Solution:
# Using nvm
nvm use 22
# or install Node 22+Solution:
cd blockchain
rm -rf cache artifacts
npx hardhat clean
npx hardhat compile- Ensure you're on Base Sepolia network
- Check wallet extension is installed
- Try refreshing the page
- Check browser console for errors
- Check you have enough Base Sepolia ETH
- Verify network is Base Sepolia (not mainnet)
- Check contract address is correct
- Review transaction on BaseScan
cd blockchain
# Compile contracts
npx hardhat compile
# Run tests
npm test
# Deploy contracts
npm run deploy
# List deployments
npm run deployments
# Test backend
npm run test-backend
# Update frontend env
npm run update-frontend
# Verify contracts
npm run verifycd Credibles
# Start dev server
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Lint code
npm run lint- Base Sepolia Explorer: https://sepolia.basescan.org/
- EAS Explorer: https://base-sepolia.easscan.org/
- Base Sepolia Faucet: https://www.coinbase.com/faucets/base-ethereum-goerli-faucet
- OnchainKit Docs: https://docs.base.org/onchainkit
- Hardhat Docs: https://hardhat.org/docs
INTEGRATION_GUIDE.md- Integration checklist and testing guideblockchain/README.md- Hardhat project documentationCredibles/README.md- Next.js project documentation
- Create a feature branch
- Make your changes
- Test thoroughly (contracts + frontend)
- Submit a pull request
[Add your license here]
- Reece Bailey (@reecebaileyy)
- Niha (@nihaparkashuni-del)
- Christian Huerta
For questions or issues, contact the team or open an issue in the repository.
Last Updated: December 4, 2025
Contract Version: v2 (Public Minting + Daily Tasks)