Tech stack: React + TypeScript + Vite + Tailwind Β· Solana Web3 RPC Β· Automatic endpoint failover Β· Mobile-first responsive design
A modern, mobile-first React application for comprehensive analysis of Solana SPL token holders. Features professional UI/UX design, detailed holder analytics, and powerful data export capabilities. Optimized for Pump.fun launchpad tokens with automatic AMM pool detection.
- Detailed holder rankings with balance, percentage ownership, and holding duration
- Token information including address, decimals, total supply, and active holder count
- Holder categorization (Whale β₯5%, Large β₯1%, Medium β₯0.1%, Small holders)
- Holding period analysis with color-coded badges (Long-term β₯30 days, Medium-term β₯7 days, Short-term)
- Top 10 concentration metrics and whale count statistics
- Mobile-first responsive design optimized for all screen sizes
- Professional gradient cards with comprehensive statistics
- Enhanced header with sticky navigation and backdrop blur
- Dark mode support with smooth transitions
- Interactive elements with hover effects and animations
- Touch-friendly interface for mobile devices
- JSON Export: Complete data structure with all holder information
- CSV Export: Spreadsheet-compatible format using Papa Parse
- Excel Export: Full-featured .xlsx files using SheetJS
- One-click export with dropdown menu selection
- Automatic RPC failover with latency testing and endpoint rotation
- Pump.fun AMM detection with special labeling for liquidity pools
- Real-time holder analysis with transaction history estimation
- Advanced search and filtering capabilities
- Error handling with retry mechanisms
- Node.js 18+ and pnpm (recommended) or npm
- Solana mainnet RPC URLs (Helius, QuickNode, or your own)
- Clone the repository
git clone <repository-url>
cd solana-token-holder-tracker- Install dependencies
pnpm install
# or
npm install- Configure environment variables
cp .env.example .envEdit .env file with your configuration:
# Solana RPC Configuration
VITE_HELIUS_API_KEY=your_helius_api_key_here
VITE_QUICKNODE_URL=your_quicknode_url_here
VITE_QUICKNODE_WS=your_quicknode_websocket_url_here
# Token Configuration
VITE_DEFAULT_TOKEN_ADDRESS=EBuTz34KVi94uoiggg8BuR5DFsDkiTM572AL2Qzepump
VITE_PUMPFUN_AMM_ADDRESS=NsumZem3j76AAucwXzy5kpgpvqWJJW5dK68YwP6yhjo- Start development server
pnpm dev
# or
npm run dev- Build for production
pnpm build
# or
npm run build| Variable | Description | Required |
|---|---|---|
VITE_HELIUS_API_KEY |
Your Helius RPC API key | Yes |
VITE_QUICKNODE_URL |
Your QuickNode RPC endpoint URL | Yes |
VITE_QUICKNODE_WS |
Your QuickNode WebSocket endpoint | Yes |
VITE_DEFAULT_TOKEN_ADDRESS |
Default token address to load | No |
VITE_PUMPFUN_AMM_ADDRESS |
Pump.fun AMM pool address for detection | No |
The app automatically tests multiple RPC endpoints and uses the fastest one. You can add additional endpoints by modifying src/services/solanaService.ts:
const RPC_ENDPOINTS: RPCEndpoint[] = [
{
name: 'Helius',
url: `https://mainnet.helius-rpc.com/?api-key=${import.meta.env.VITE_HELIUS_API_KEY}`,
ws: `wss://mainnet.helius-rpc.com/?api-key=${import.meta.env.VITE_HELIUS_API_KEY}`,
latency: null
},
// Add more endpoints here
];- Token Metadata: Fetches token decimals and supply using
@solana/web3.js - Token Accounts: Queries
TOKEN_PROGRAM_IDparsed accounts filtered by mint - Balance Aggregation: Aggregates balances and sorts by amount descending
- Transaction History: Requests up to 1000 signatures per account for "days held" estimation
- AMM Detection: Identifies Pump.fun liquidity pools using known AMM addresses
- JSON: Complete holder data with all fields and metadata
- CSV: Comma-separated values compatible with Excel and Google Sheets
- Excel: Native .xlsx format with proper formatting and data types
- Responsive Grid: Adapts from 2 columns (mobile) to 5 columns (desktop)
- Adaptive Typography: Scales text sizes based on screen size
- Touch Interface: Optimized button sizes and spacing for mobile
- Horizontal Scroll: Table scrolls horizontally on small screens
- Condensed Information: Shows essential data on mobile, full details on desktop
src/
βββ components/
β βββ Header.tsx # Enhanced sticky header with mobile nav
β βββ TokenInput.tsx # Token address input with validation
β βββ HoldersTable.tsx # Comprehensive holders table with export
β βββ ExportButton.tsx # Data export functionality
β βββ LoadingSpinner.tsx # Loading state component
β βββ ErrorMessage.tsx # Error handling component
βββ services/
β βββ solanaService.ts # Solana blockchain interaction service
βββ hooks/
β βββ useTheme.tsx # Dark/light theme management
βββ types/
β βββ index.ts # TypeScript type definitions
βββ App.tsx # Main application component
- @solana/web3.js: Solana blockchain interaction
- @solana/spl-token: SPL token program utilities
- react & react-dom: UI framework
- lucide-react: Modern icon library
- papaparse: CSV parsing and generation
- xlsx: Excel file generation and manipulation
- vite: Fast build tool and dev server
- typescript: Type safety and development experience
- tailwindcss: Utility-first CSS framework
- eslint: Code linting and quality
- Launch your token on Pump.fun
- Copy the token mint address from the success page
- Paste the address into the app input field
- View comprehensive holder analytics and export data
- Enter any Solana SPL token mint address
- The app will automatically detect if it's a Pump.fun token
- View detailed holder distribution and statistics
- Export data in your preferred format
Empty or small holder list
- Verify the mint address is correct and on mainnet
- Ensure the token has active holders with non-zero balances
RPC errors or timeouts
- Check your API keys in the
.envfile - Verify your RPC provider quotas and limits
- The app will automatically retry with different endpoints
Export not working
- Ensure you have holder data loaded before exporting
- Check browser permissions for file downloads
Mobile display issues
- Clear browser cache and reload
- Ensure you're using a modern mobile browser
- Lazy loading for large holder lists
- Automatic RPC failover for reliability
- Efficient data structures for fast sorting and filtering
- Responsive images and optimized assets
- Code splitting for faster initial load
- Read-only operations: No private keys or signing required
- Environment variables: Sensitive API keys stored securely
- HTTPS endpoints: All RPC connections use secure protocols
- Input validation: Token addresses validated before processing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License. Use at your own risk. This application makes read-only RPC calls and holds no private keys.
For issues, questions, or contributions, please visit the GitHub repository or contact the development team.
