Tip.md
We help OSS Devs get paid frictionlessly
Created on 16th August 2025
•
Tip.md
We help OSS Devs get paid frictionlessly
The problem Tip.md solves
Problems @tipdotmd Solves
🚀 Instant Developer Support
Before: Complex, Multi-Step Process
- Find developer's crypto wallet address (if they even have one public)
- Leave Farcaster → Open wallet app → Copy/paste addresses → Send transaction
- No way to know if tip was received or appreciated
- High friction = most people don't bother tipping
After: One-Click Appreciation
- Search & tip any Farcaster user instantly
- Stay within Farcaster - never leave the app
- Built-in wallet discovery - automatically finds their addresses
- Instant confirmation with shareable proof
💡 Open Source Funding Gap
Problem: OSS Developers Go Unrewarded
- Amazing open source work gets ⭐s but no 💰
- No easy way to financially support developers you discover
- Sponsorship platforms are complex and require long-term commitments
Solution: Micro-Funding Made Simple
- Spontaneous appreciation - tip when you see great work
- Trending developer discovery - find who to support today
- GitHub activity integration - tip based on recent contributions
- No long-term commitments - simple one-off appreciation
🔗 Identity Fragmentation
Problem: Disconnected Digital Identities
- GitHub username ≠ Farcaster handle ≠ crypto wallet
- Hard to connect social appreciation with financial support
- Developers can't easily monetize their social presence
Solution: Unified Identity Bridge
- Links GitHub → Farcaster → Crypto wallets
- Social discovery leads to direct financial support
- Cross-platform reputation - build following that pays
🛡️ Crypto UX Barriers
Problem: Crypto Payments Are Intimidating
- Wallet addresses are confusing (0x1a7Dd27...)
- Fear of sending to wrong address = lost money
- Gas fees, network selection, token contracts - too complex
Solution: Social-First Crypto
- Human-readable recipients - tip @username, not 0x addresses
- Automatic network/token selection - just pick amount
- Built-in safety - addresses verified through social profiles
- Familiar interface - feels like social media, not DeFi
📱 Platform Lock-in
Problem: Tipping Trapped in Silos
- Twitter tips stay in Twitter
- GitHub Sponsors only work on GitHub
- Can't tip across platforms
Solution: Universal Tipping Layer
- Cross-platform discovery - find on GitHub, tip via Farcaster
- Real cryptocurrency - not platform tokens
- True ownership - tips go to user's actual wallet
⚡ Real-Time Appreciation
Problem: Delayed Gratification Kills Momentum
- See great work → bookmark to support later → forget
- Complex sponsorship setup = procrastination
- No immediate feedback loop for creators
Solution: Instant Gratification Loop
- Impulse appreciation - tip in the moment of discovery
- Immediate notification - creator gets instant dopamine hit
- Viral sharing - tips become social proof and marketing
🎯 Use Cases Made Simple
For Supporters
- Discover trending devs → tip promising projects
- React to great commits → financial appreciation
- Support without commitment → one-time thank you
- Show social proof → tips as public endorsements
For Creators/Developers
- Monetize social presence → followers become income
- Get immediate feedback → tips signal what resonates
- Build funding relationships → tips can lead to bigger sponsorships
- Cross-platform revenue → GitHub work pays via Farcaster
For the Ecosystem
- Incentivize quality → good work gets rewarded faster
- Reduce funding friction → more people actually tip
- Create network effects → viral tip sharing drives adoption
- Bridge Web2/Web3 → social meets crypto seamlessly
🌟 Bottom Line
tipdotmd transforms appreciation from passive (likes, stars) to active (financial support) by removing every possible barrier between "I want to tip this person" and "tip sent successfully."
It makes supporting developers as easy as liking a post, but with real economic impact.
Challenges I ran into
Challenges & Solutions
🔗 Disperse Contract Availability
Problem: Disperse.app contract (0xD152f549545093347A162Dce210e7293f1452150) not deployed on all chains
// Celo doesn't have Disperse at same address
const disperseTransaction = tipData.blockchain === 'celo' ? null : createEthDisperseTransaction();
Solution: Built fallback system - try Disperse first, fall back to direct transfers
- Maintains fee splitting on supported chains
- Graceful degradation on unsupported chains
💰 Precision Loss in Token Calculations
Problem: JavaScript floating point math breaking token amounts
// This breaks: 0.1 + 0.2 = 0.30000000000000004
const amountWithDecimals = parseFloat(amount) * Math.pow(10, decimals);
Solution: BigInt arithmetic for precise decimal handling
const multiplier = BigInt(10) ** BigInt(decimals);
const totalAmount = BigInt(integerPart) * multiplier + BigInt(decimalPart);
🔄 Cross-Chain Identity Linking
Problem: GitHub username ≠ Farcaster handle ≠ wallet addresses
- No universal way to verify cross-platform identity
- Users have different usernames across platforms
Solution: Multi-layered verification system
- Farcaster verification via Neynar API
- GitHub verification through commits/profile links
- Wallet verification through transaction signatures
- Fallback to manual address entry
📱 Farcaster Frame Constraints
Problem: Frame SDK limitations in miniapp context
- Limited screen real estate
- Wallet connection issues in embedded frames
- Safe area handling across different clients
Solution: Dynamic import + responsive design
const FarcasterMainContainer = dynamic(() => import("~/components/farcaster/FarcasterMainContainer"), { ssr: false });
⚡ Transaction Reliability
Problem: Failed transactions with no user feedback
- Network timeouts
- Gas estimation failures
- User wallet rejections
Solution: Comprehensive error handling + retry logic
try {
// Try Disperse transaction
} catch {
// Fall back to direct transfer
console.warn("Disperse failed, trying fallback");
}
🔍 Rate Limiting on APIs
Problem: Neynar/GitHub API limits during user search
- Search requests hitting rate limits
- Slow response times affecting UX
Solution: Debounced search + smart caching
const debouncedSearch = debounce(async (query: string) => {
// Only search after user stops typing
}, 300);
🎯 Mobile Performance
Problem: Heavy components causing frame drops
- Large transaction history lists
- Complex GitHub activity rendering
- Wallet connection overhead
Solution: Virtualization + lazy loading
- Infinite scroll with pagination
- Dynamic imports for heavy components
- Aggressive memoization of expensive calculations
Key Learning: Start with fallbacks from day one - don't assume external contracts/APIs will always work as expected.
Smart Contract Address(es)
Smart Contract Addresses
Primary Contract
Disperse.app Contract
0xD152f549545093347A162Dce210e7293f1452150
- Purpose: Multi-recipient token/ETH distribution with automatic fee splitting
- Networks: Ethereum, Base (same address across EVM chains)
- Functions Used:
disperseEther()- Distributes native tokens (ETH) to multiple recipientsdisperseToken()- Distributes ERC-20 tokens (USDC, USDT) to multiple recipients
Implementation Details
Fee Distribution Logic:
- Automatically splits tips between recipient (96%) and platform (4%)
- Single transaction for both recipient payment and fee collection
- Fallback to direct transfers if Disperse contract unavailable
Multi-Chain Strategy:
- Ethereum & Base: Full Disperse contract integration
- Celo: Fallback to direct transfers (Disperse not deployed at same address)
- Solana: Native Solana program instructions (non-EVM)
Contract ABI (Key Functions)
function disperseEther(address[] recipients, uint256[] values) payable external;
function disperseToken(address token, address[] recipients, uint256[] values) external;
Note: This project leverages existing, battle-tested infrastructure (Disperse.app) rather than deploying custom contracts, ensuring security and gas efficiency for multi-recipient transactions.
Other Onchain Proof

amount blockchain token transactionHash usdValue status
1.3 celo USDT 0xe9bbce97601b8da1ee68270278b77329e4c34cdf2bb8a2029514faa462859835 1.30 confirmed
1.5 celo CELO 0xfc89f31d37bcf4d3442663fc46fd8c0082cd9ffa8f169d66c8cb1424d53c7558 0.51 confirmed
1.00 base USDC 0x936a1295f61de4dcd4736b5a13c2a3bd549d3da7259d1a95c854d06808d75087 1.00 confirmed
0.1 celo USDT 0xa8c3f068ececa32a8996a80f5243106bba273150e52f5eabd321fe1f7ac4dfcf 0.10 confirmed
0.1 celo CELO 0x67fa13658f95815f23ea570f50bc00160ac7a1e1ea3e9bbb4947cdc4546f588b 0.03 confirmed
0.0113 base ETH 0x7b7837c739d6b47a23b057069f6df5a57190b3f80a7282c18afa610c18c85634 49.79 confirmed
0.2 base USDC 0x582be63131a3c1f272feffe09e3a3a42f8b4cf8e07361850f1632d60a1162057 0.20 confirmed
0.0001 base ETH 0xbaa7849bfee0115f5fe51b9c0f21c133557f094aafd4f7a4abec07b391584654 0.44 confirmed
0.000227 base ETH 0x038205f0e597dee6aaa8af3097b8ae90132c23197794c5890424a951639dd93a 1.00 confirmed
0.00022620 base ETH 0x09a3a16c95e8bee2efddcdfe77539328bae3918579ccb043d9097aa9e88bf58a 1.00 confirmed
0.00022649 base ETH 0xc2b5f60874d96c074875d9c33b69356216a167094984f4e546d88d755470ab98 1.00 confirmed
1.00 base USDC 0x55f9b703d57d430d6d65162ca7b5d14d616f854616f7e0b10a7ab155d30dead2 1.00 confirmed
0.00033333 base ETH 0xb634cad6e9f36401693d96c97bceb6cc12dfb35dc84f0946479d68e33c6c133b 1.47 confirmed
0.005416 solana SOL 5KF76aCZYSBuxqBgjHe21UanEFyK9BoKCJN6MmwyHsEeq1WL429AeqcmQthCmCZCqDRtcspSpuDq5s9U4eeA2ip2 1.00 confirmed
0.00033333 base ETH 0x602ee22b840dcac03d371c5b485d1aea9155410b6af24bc36fa496b7932a00b1 1.47 confirmed
1.00 base USDC 0x4c21e0341ca225d870ee0736c28ce5c44e72c3ef57526f93163fa314c4362b2d 1.00 confirmed
0.00022673 base ETH 0xdcfd794325c1ccd3d79f5b3be4686fb6b57f775b873bd16803712b682d123a0e 1.00 confirmed
0.1 celo CELO 0xea9282577970d21b36ea3439b88f5b7fbc1e858c4c4eb331112560f0e6dbff67 0.03 confirmed
0.1 celo USDT 0x270e0a53c4b596d3fb2c179abdd84ea319d84d7262f975289f09fa7e0fd5300b 0.10 confirmed
1.00 celo USDT 0xc9c8202db78289b4ea7929d3d942b452edb6a10300220a7beaae3412c72351a8 1.00 confirmed
0.4901 celo USDT 0x435d67aae3a42875a3e3e868d43cea09ad29a57c51e028fd9e9df98f07f85d82 0.49 confirmed
0.5 celo CELO 0x07cd98d89c4ddac313541a22f64984b667aadc41e6a6dc942da2f192e742ac05 0.17 confirmed
0.000214 celo ETH 0x57c50bf5b375482283193f22e512a4a30bbc7fe1da7e0d4d15921aa3bd3268bd 1.00 confirmed
1.00 celo USDT 0x771beb0d0d5787ae0da26073075b686a882beb825151428ec77b595ebd088107 NaN confirmed
1.00 celo USDT 0x926734648b4dda2351a2f6d8a76245accd9a95a62991313cab231dc06d8dc493 NaN confirmed
0.5 celo USDT 0x56e95db04cdaaff3557a51c81663034c6ce5e59d63a530cb052eeebc5b61d0b3 NaN confirmed
1.00 celo USDC 0xd4b8db44ae0fcae76c41260d85aacf4ef25bc51057473406dbe0b54ce9f45538 1.00 confirmed
.5 celo USDC 0x24fe18a397ef9f89d49c4da620e0cc0d2b4299ad96d8c652e00cd3dd6bbf482f 0.50 confirmed
0.0001 base ETH 0x50df7911e9b40af08bb18919c2b4dd5d877d80533f23c3c3343d3a51b974c018 0.47 confirmed
1 celo CELO 0x2a90255a328df06594427ee74c41900cb4c0fad1d05cfa3e3f9dfe8cf6e316aa 0.37 confirmed
0.00021116 base ETH 0xc72de040fa8f37863361e864bdf0062ba11004e12f14a965a4ba4924902d09f6 1.00 confirmed
0.0001 base ETH 0x2cba94c4212ac54c4a378f6d5dfbe902b6f54a6e8c6a045830ca5e5d5708b5fe 0.47 confirmed
0.0001 base ETH 0x796e1afb3cabbddeb3fa741114453688e5afaacf881cb43ca9c79724226ca047 0.47 confirmed
.0001 base ETH 0x44f9e5fb831d5dc67f3862bd9a62db520d77fb0e60d348fe8decabcb2e090c5c 0.43 confirmed
0.000233 base ETH 0x2640a43a10df4a98bf34a997e3a8df67416e1d2c4b1021d25069fea261455ddf 1.00 confirmed
0.00023169 ethereum ETH 0xbc6113099f457f6b7d55dbf62eba0b886803a24c87630bbdd8e0cff03e91ea70 1.00 confirmed
0.0001 base ETH 0x70d8e10b641f79ac4b6cc004e827beec2a8c78553790651a52e326d9e5e1c304 0.43 confirmed
.05 base USDC 0xdd5b27cd21c7bddc624598a7b3f3b1c2ef92eb9d12e9c032f943b5fea534f377 0.05 confirmed
0.000239 base ETH 0x7a0d1f072ef8d240c520c6c4389a9d552f793fb8d91083c8ec7c6750d4d1a055 1.00 confirmed
0.001 solana SOL 5EmHYNoZwtLM8KRADGQM27BbVZuxbDynb25NgS2jxBfzZHG31KRwaYVBjxHsjCHNZ4Dt9FZ4m6gHEwemZEhmajun 0.18 confirmed
0.01 base USDC 0xf9518bb3a2bf628dbefa4b01cb97da4f02946ec30e25b83d0508338a02758d65 0.01 confirmed
0.00128 base ETH 0x839ac99494f57db826a0b0e2247fabed42072527f5205e44241d3d9f48bde0c9 4.99 confirmed
1.00 base USDC 0x603500522878cf0c6373e1930e5678cc2bff7b66b85f4226204dcc5c50e367a3 1.00 confirmed
0.01 base USDC 0xe110503ffbd866da9f970316e4bf9fffece77f22d7cca7f9bc108205d5e730ed 0.01 confirmed
0.0001 solana SOL 3SXwX7oZNmPhah5uZVDj2hCfZDAX8b52RQXf7NbKuHMHVSUugHWTBsm4LVR9vsqJmXPRMM5teVFAi6j4AsyRa1ns 0.02 confirmed
0.000263 base ETH 0x5dd4b1a32e29838b0acbb4cd130f9313abf7fd85f90f1bca494dc5621aab965e 1.00 confirmed
0.1 base USDC 0x0671c4a2c492592966572ff23ca8cebb8b5966c3dafeefd4641f09a1452f877f 0.10 confirmed
1.00 base USDC 0xb8cec5f1422f719b018ef4d51bfea7f532cde81c3866a24480c68adcd83fc038 1.00 confirmed
1.00 base USDC 0xc97dc83070ab73b1633ab70b9ce7
Tracks Applied (1)
Top 5 Live Consumer Apps
Technologies used
Cheer Project
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.
