ResQ is a decentralized donation board for disaster relief built on VeChain. Organizers post verifiable relief bounties, donors fund them in VET, organizers submit proof of relief to IPFS, and funds are released once verified.
- React + Vite + TypeScript
- VeChain DApp Kit (
@vechain/vechain-kit,@vechain/dapp-kit-react) with fee delegation - Hardhat + Solidity (
contracts/DonationBoard.sol) - IPFS via Pinata for proof storage
- Prereqs
- Node 18+
- VeChain Testnet account with VET/VTHO (for deployment); end-users benefit from fee delegation
- Install
npm i- Configure environment — create
.envin the repo root:
# VeChain Network
VITE_THOR_NODE_URL=https://testnet.vechain.org
# Deployed Contract Address (update after deployment)
VITE_DONATION_BOARD_ADDRESS=0x84c279658b29de90f8edb14dd833be96d62a744e
# Privy Configuration (get from privy.io)
VITE_PRIVY_APP_ID=your-privy-app-id-here
# WalletConnect (optional)
VITE_WALLETCONNECT_PROJECT_ID=default-project-id
# IPFS Upload Service
VITE_PINATA_JWT=your-pinata-jwt-token
# Contract Deployment Keys
VITE_DEPLOYER_PRIVATE_KEY=0x...
VITE_MNEMONIC=word1 word2 ... word12
VITE_DERIVATION_COUNT=2- Deploy contract to testnet (optional if you already have an address like you can use the one I deployed which is 0x2e7a9ad2c68a6431c6741d800f7f2efbcafd4b39)
npx hardhat compile
npm run deploy:contractsCopy the printed address into .env as VITE_DONATION_BOARD_ADDRESS.
- Run the app
npm run dev- Post bounty: organizer sets title, description, location, goal, and image.
- Donate: anyone can donate VET to the bounty escrow.
- Submit proof: organizer uploads proof (e.g., images/JSON) to IPFS.
- Release funds: organizer calls release with a verification flag.
npm run dev— start web appnpm run build— build frontendnpm run deploy:contracts— deploy Solidity contract to VeChain testnet (only if you want your own donationboard contract)
- Setup:
docs/SETUP.md - Deployment:
docs/DEPLOYMENT.md - Architecture:
docs/ARCHITECTURE.md - VeChain integration:
docs/VECHAIN.md - Troubleshooting:
docs/TROUBLESHOOTING.md - Contract details:
README_CONTRACTS.md
- The
verifiedflag inreleaseFundsis a demo placeholder; do not rely on organizer-provided verification in production. - Always protect private keys and never commit secrets. Use
.envand a secrets manager.
MIT