ClearFund addresses the fragmented and inefficient experience builders and creators face when discovering funding opportunities across the Ethereum ecosystem. It aggregates active grants, web3 micro tasks from multiple platforms into one unified dashboard, streamlining access and improving visibility.
- Unified Grant Dashboard: Discover active grants and funding opportunities from multiple Web3 platforms
- Real-time Updates: Stay updated with the latest funding programs and opportunities
- Multi-chain Support: Explore opportunities across various blockchain ecosystems (Celo, Ethereum, Polygon, Optimism, etc.)
- Past Grant Data: Access historical grant data for research and analysis
- Wallet Integration: Connect with multiple wallet providers (MetaMask, WalletConnect, Coinbase Wallet)
- User Authentication: Secure authentication with Privy (email and wallet login)
- Framework: Next.js 15.3.4
- React: 19.1.1
- Styling: Tailwind CSS 4
- UI Components:
- Radix UI components
- shadcn/ui
- Lucide React icons
- Web3 Integration:
- Wagmi 2.16.9
- RainbowKit 2.2.8
- Viem 2.37.1
- Privy 2.0.0
- State Management: Redux Toolkit 2.8.2
- Data Fetching: TanStack Query 5.85.9
- Authentication: Privy, Firebase
- Database: Firebase Firestore, Mongoose
- Other:
- Embla Carousel
- Ethers.js 6.15.0
Before you begin, ensure you have the following installed:
- Node.js: 22.x (see
package.jsonengines) - npm or yarn package manager
- Git
git clone <repository-url>
cd Clearfundnpm install
# or
yarn installCopy the .env.example file to .env.local:
cp .env.example .env.local# WalletConnect Configuration
# Get your project ID from https://cloud.walletconnect.com
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=your_walletconnect_project_id_here
# Privy Configuration
# Get your app ID from https://privy.io
NEXT_PUBLIC_PRIVY_APP_ID=your_privy_app_id_here
# Firebase Configuration
# Get these values from your Firebase project settings
# https://console.firebase.google.com/
NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key_here
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_firebase_auth_domain_here
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_firebase_project_id_here
NEXT_PUBLIC_FIREBASE_APP_ID=your_firebase_app_id_here
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_firebase_messaging_sender_id_here
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_firebase_storage_bucket_herenpm run dev
# or
yarn devOpen http://localhost:3000 in your browser to see the application.
Clearfund/
βββ src/
β βββ app/ # Next.js app directory (pages)
β β βββ about/ # About page
β β βββ archive/ # Archive page
β β βββ connect-with-us/ # Contact page
β β βββ donate/ # Donate page
β β βββ faq/ # FAQ page
β β βββ grants/ # Grants listing page
β β βββ past-grant-table/ # Past grants table
β β βββ spreadsheet-analytics/ # Analytics page
β β βββ support/ # Support page
β β βββ layout.js # Root layout
β β βββ page.js # Home page
β β βββ globals.css # Global styles
β βββ components/ # React components
β β βββ ui/ # shadcn/ui components
β β βββ Footer.jsx
β β βββ GrantDashboard.jsx
β β βββ GrantRoundCard.jsx
β β βββ hero.jsx
β β βββ navHeader.jsx
β β βββ Provider.jsx # Wagmi/RainbowKit provider
β β βββ ...
β βββ lib/ # Utility libraries
β βββ firebase.js # Firebase configuration
β βββ wagmiConfig.js # Wagmi/RainbowKit configuration
β βββ utils.js # Utility functions
β βββ withAuth.js # Auth utilities
βββ public/ # Static assets
βββ components.json # shadcn/ui configuration
βββ next.config.mjs # Next.js configuration
βββ package.json # Dependencies and scripts
βββ README.md # This file
npm run dev- Start development server with Turbopacknpm run build- Build the application for productionnpm run start- Start the production servernpm run lint- Run ESLint to check code quality
- Visit WalletConnect Cloud
- Create a new project
- Copy your Project ID
- Add it to
.env.localasNEXT_PUBLIC_WALLETCONNECT_PROJECT_ID
- Visit Privy Dashboard
- Create a new application
- Copy your App ID
- Add it to
.env.localasNEXT_PUBLIC_PRIVY_APP_ID
- Visit Firebase Console
- Create a new project or select an existing one
- Go to Project Settings > General
- Scroll down to "Your apps" and add a web app
- Copy the configuration values and add them to
.env.local
We welcome contributions! Here's how you can help:
-
Fork the repository and create your branch from
maingit checkout -b feature/your-feature-name
-
Make your changes following the existing code style:
- Use consistent formatting
- Write clear, descriptive commit messages
- Add comments for complex logic
-
Test your changes:
npm run lint npm run build
-
Commit your changes:
git commit -m "Add: description of your changes" -
Push to your fork and create a Pull Request
- Follow the existing code structure and patterns
- Use functional components with hooks
- Keep components focused and modular
- Use meaningful variable and function names
- Add comments for complex business logic
If you find a bug or have a suggestion:
- Check if the issue already exists
- Create a new issue with:
- Clear title and description
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Screenshots if applicable
All environment variables use the NEXT_PUBLIC_ prefix, which means they are exposed to the client-side in Next.js. Make sure not to include sensitive server-side secrets in these variables.
Required environment variables:
Web3 & Wallet Integration:
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID- WalletConnect project IDNEXT_PUBLIC_PRIVY_APP_ID- Privy application ID
Smart Contract Integration:
NEXT_PUBLIC_CLEARFUND_REGISTRY_ADDRESS- Deployed ClearFundRegistry contract address on Celo
IPFS Configuration (choose one provider):
NEXT_PUBLIC_IPFS_PROVIDER- IPFS provider name (pinataornft-storage, default:pinata) - Safe to expose
Option 1: Pinata (Recommended)
PINATA_JWT- Pinata JWT token for API access (SERVER-SIDE ONLY, noNEXT_PUBLIC_prefix)NEXT_PUBLIC_PINATA_GATEWAY- Pinata gateway URL (optional, default:https://gateway.pinata.cloud) - Safe to expose
Option 2: NFT.Storage
NFT_STORAGE_KEY- NFT.Storage API token (SERVER-SIDE ONLY, noNEXT_PUBLIC_prefix)
Firebase Configuration:
NEXT_PUBLIC_FIREBASE_API_KEY- Firebase API key - Safe to exposeNEXT_PUBLIC_FIREBASE_AUTH_DOMAIN- Firebase auth domain - Safe to exposeNEXT_PUBLIC_FIREBASE_PROJECT_ID- Firebase project ID - Safe to exposeNEXT_PUBLIC_FIREBASE_APP_ID- Firebase app ID - Safe to exposeNEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID- Firebase messaging sender ID - Safe to exposeNEXT_PUBLIC_FIREBASE_STORAGE_BUCKET- Firebase storage bucket - Safe to expose
NEXT_PUBLIC_ prefix) to prevent them from being exposed to the browser. Never use NEXT_PUBLIC_ prefix for secrets.
π Setup Instructions:
- Copy
.env.exampleto.env.local - Fill in all required values
- For server-side secrets (PINATA*JWT, NFT_STORAGE_KEY), ensure they do NOT have
NEXT_PUBLIC*prefix - Never commit
.env.localto version control
The application is configured for deployment on Netlify. The @netlify/plugin-nextjs is included in devDependencies.
npm run build
npm run startThis project is private and proprietary.
- Built with Next.js and React
- Web3 integration powered by Wagmi, and Privy
- UI components from Radix UI and shadcn/ui
For questions or support, please open an issue or contact the maintainers.