Check in daily on-chain. 7-day streak = 10 DROP tokens + G$ rewards.
Compatible MiniPay β | Compatible Farcaster β | Celo + Base β | Proof of Presence β
π App : https://dailydrop-five.vercel.app
π Leaderboard : https://dailydrop-five.vercel.app/leaderboard
π‘οΈ Shield API : https://dailydrop-five.vercel.app/api/verify
π€ MCP Server : https://dailydrop-five.vercel.app/api/mcp
π€ Agent Card : https://dailydrop-five.vercel.app/.well-known/agent-card.json
π OpenAPI : https://dailydrop-five.vercel.app/.well-known/openapi.json
π¦ SDK : npm i @dailydrop/shield
π GitHub : https://github.com/wkalidev/dailydrop
DailyDrop is two things at once:
-
A daily check-in app β users check in on-chain every day, build a 7-day streak, and earn DROP tokens + G$ rewards.
-
A Proof of Presence Protocol β
DailyDropShieldis an open infrastructure layer that any project can use to verify real humans by their on-chain streak. No KYC. No passport scan. Just behavioral proof.
A streak on-chain can't be faked retroactively. If a wallet showed up every day, it's a real human.
- Connect wallet (MiniPay auto-connects, or MetaMask/RainbowKit)
- Click Check-in once per day (1 TX on-chain)
- Build a 7-day consecutive streak
- Claim 10 DROP tokens π + G$ bonus π±
- Repeat!
Any project can verify real humans using the free public API or npm SDK:
GET https://dailydrop-five.vercel.app/api/verify?address=0xABC&minStreak=7{
"address": "0xABC...",
"passed": true,
"streak": { "current": 12, "celo": 12, "base": 0 },
"badges": { "level": 1, "label": "π₯ Weekly", "weekly": true },
"shield": "0x24eFf9bdE979D6dccC869178F353D663bC8A6983"
}npm install @dailydrop/shieldimport DailyDropShield, {
CELO_DAILYDROP,
BASE_DAILYDROP,
SHIELD_ADDRESS,
STREAK_MASTER_ADDRESS,
STREAK_NFT_ADDRESS,
} from "@dailydrop/shield"
const shield = new DailyDropShield()
const isHuman = await shield.isHuman("0xABC...", 7)
const streak = await shield.getStreak("0xABC...")
const badge = await shield.getBadge("0xABC...")
// Batch verify for airdrop filtering
const results = await shield.verifyBatch(["0xABC...", "0xDEF..."], 7)| Use Case | minStreak |
|---|---|
| Airdrop sybil filter | 7 |
| DAO voting weight | 30 |
| NFT allowlist | 7 |
| DeFi APY boost | 14 |
| Contract | Address |
|---|---|
| DailyDrop | 0xd8Cc2a639a8D4e7A75a5B41C28606712e4fDf70b |
| DailyDropShield | 0x24eFf9bdE979D6dccC869178F353D663bC8A6983 |
| Contract | Address |
|---|---|
| DailyDrop | 0x974fB504172f2aABbecc698Ebf137202a5E4e495 |
| StreakMaster | 0x038F496eCf99ecA5959A40493C96670Ea8a14345 |
| StreakNFT | 0xbBa5865b3E3A5033730f851d555cc922B74B25Fa |
DailyDrop integrates GoodDollar G$ as bonus rewards:
- Streak 7 days β 100 G$ bonus
- Streak 30 days β 500 G$ bonus
- Streak 100 days β 2000 G$ bonus
G$ token on Celo: 0x62B8B11039FcfE5aB0C56E502b1C372A3D2a9C7A
| Category | Score |
|---|---|
| Engagement | 13/100 (2 reviews) |
| Service | 100/100 β MCP + OASF + A2A |
| Compliance | 100/100 β full metadata |
| x402 | enforced on verify_batch |
| Total | targeting 90+/100 |
Agent URL: https://8004scan.io/agents/celo/9421
verify_batch (up to 100 wallets) requires an HTTP 402 payment. When called without an X-Payment header the server returns:
HTTP 402
X-Payment-Required: {"scheme":"exact","network":"base","maxAmountRequired":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",...}
Pay 0.01 USDC on Base to 0x038F496eCf99ecA5959A40493C96670Ea8a14345, then retry with the X-Payment header. All other tools are free.
Full API spec at /.well-known/openapi.json (OpenAPI 3.1.0).
Declares x402 security scheme, all endpoints, and OASF metadata for agent-scanner compliance.
- Inline critical CSS β above-the-fold styles inlined in
<head>for immediate paint (no FOUC) - Fonts: self-hosted at build time via
next/font/googleβ eliminates render-blocking Google Fonts request - Viewport: user zoom enabled (accessibility compliant, WCAG 1.4.4)
- CLS: protocol stats section always reserves DOM space (skeleton while loading) to prevent layout shift
- Bundle:
optimizePackageImportsfor wagmi / viem / RainbowKit tree-shaking
| Layer | Tech |
|---|---|
| Smart Contracts | Solidity 0.8.20, OpenZeppelin ERC20 |
| Frontend | Next.js 14, TypeScript |
| Web3 | wagmi v2, viem, RainbowKit |
| Shield SDK | TypeScript, viem (@dailydrop/shield v1.2.0) |
| AI Coach | Claude Haiku 4.5 (Anthropic) |
| Chains | Celo Mainnet + Base Mainnet |
| Deploy | Vercel (frontend), Hardhat (contracts) |
| Agent | MCP 2024-11-05, A2A, OASF, x402 |
git clone https://github.com/wkalidev/dailydrop
cd dailydrop
npm install
cd frontend && npm installNEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=...
NEXT_PUBLIC_CDP_PROJECT_ID=...
NEXT_PUBLIC_CELO_CONTRACT_ADDRESS=0xd8Cc2a639a8D4e7A75a5B41C28606712e4fDf70b
NEXT_PUBLIC_BASE_CONTRACT_ADDRESS=0x974fB504172f2aABbecc698Ebf137202a5E4e495
NEXT_PUBLIC_SHIELD_ADDRESS=0x24eFf9bdE979D6dccC869178F353D663bC8A6983
NEXT_PUBLIC_STREAK_MASTER_ADDRESS=0x038F496eCf99ecA5959A40493C96670Ea8a14345
NEXT_PUBLIC_STREAK_NFT_ADDRESS=0xbBa5865b3E3A5033730f851d555cc922B74B25Fa
CELOSCAN_API_KEY=...
BASESCAN_API_KEY=...
ANTHROPIC_API_KEY=...npm run deploy:celo # Deploy DailyDrop + DailyDropShield on Celo
npm run deploy:base # Deploy DailyDrop on BaseAuto-detects MiniPay via window.ethereum.isMiniPay:
- Auto wallet connection via injected provider (no modal shown)
- Forces Celo mainnet on every connection via
switchChain - Connect button hidden when MiniPay is detected
- Graceful connection error recovery with retry button
- Gas fees in cUSD
- Mobile-optimized UI (360Γ640 px minimum viewport, user zoom enabled)
- Terms / Privacy / Support links open
target="_self"(in-app, no external tab)
Test: https://dailydrop-five.vercel.app
Proof of Presence verification. Reads streaks from both Celo and Base chains.
{
"address": "0xABC...",
"passed": true,
"minStreak": 7,
"streak": { "current": 12, "bestChain": "celo", "celo": 12, "base": 0 },
"checkins": { "total": 36, "canCheckIn": false, "canClaim": false, "nextCheckIn": 1780613801 },
"badges": { "level": 1, "label": "π₯ Weekly", "weekly": true, "monthly": false, "century": false },
"shield": "0x24eFf9bdE979D6dccC869178F353D663bC8A6983",
"meta": { "verifiedAt": "2026-06-22T00:00:00.000Z", "celoscan": "...", "basescan": "..." }
}CORS: fully open (Access-Control-Allow-Origin: *). Cache: 60s.
Protocol-wide analytics. Fetches transaction counts from Celoscan + Basescan. Cached 5 minutes.
{
"totalCheckIns": 842,
"uniqueWallets": 301,
"celoWallets": 190,
"baseWallets": 145
}Environment variables: CELOSCAN_API_KEY, BASESCAN_API_KEY
Returns wallet addresses sorted by activity, sourced from Etherscan V2 API with Basescan V1 fallback. Includes celoAddresses and baseAddresses arrays for chain-filter UI.
AI streak coach powered by Claude Haiku 4.5. Returns personalized motivation, action tip, and on-chain data.
{
"streak": 5,
"totalCheckIns": 12,
"canCheckIn": true,
"canClaim": false,
"riskLevel": "low",
"message": "5 days in β 2 more to claim 10 DROP. You're almost there!",
"tip": "Check in now while you remember β consistency beats motivation.",
"aiPowered": true
}Environment variable: ANTHROPIC_API_KEY (optional β falls back to deterministic heuristics)
MCP Server (protocol 2024-11-05). Tools: verify_streak, get_profile, verify_batch (x402), get_stats.
# Discovery
GET https://dailydrop-five.vercel.app/api/mcp
# Tool call (free)
POST https://dailydrop-five.vercel.app/api/mcp
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"verify_streak","arguments":{"address":"0xABC...","minStreak":7}}}
# verify_batch β requires X-Payment header (0.01 USDC on Base)
POST https://dailydrop-five.vercel.app/api/mcp
X-Payment: <signed-payment-proof>
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"verify_batch","arguments":{"addresses":["0xABC...","0xDEF..."],"minStreak":7}}}A2A AgentCard v1.2.0 β 5 skills: verify_streak, get_profile, verify_batch, get_leaderboard, get_stats. Full OASF metadata, x402 pricing, and authentication scheme declared.
OpenAPI 3.1.0 spec for all Shield API endpoints. Declares x402 security scheme. Used by OASF-compatible agent scanners.
Returns a 1200Γ630 SVG image for Farcaster Frames. Personalized when address is provided (shows live streak, color-coded). Generic brand image when no address given.
Cross-chain source of truth. Receives check-ins from Celo, Base, and Stacks via authorized relayers. Maintains an on-chain leaderboard (top 10), streak tiers, and triggers rewards.
Address (Base Mainnet): 0x038F496eCf99ecA5959A40493C96670Ea8a14345
Proof of Presence verification layer. Any project can call verify(address, minStreak) to check if an address is an active human. Free. No KYC.
Address (Celo Mainnet): 0x24eFf9bdE979D6dccC869178F353D663bC8A6983
REST API: GET /api/verify?address=0x...&minStreak=7
Note:
verify()isnonpayable(notview) because it caches results on-chain. UseverifyView()for gas-free reads.
Soulbound ERC-721 NFT with 100% on-chain SVG metadata. Automatically updates on each check-in. Non-transferable.
Address (Base Mainnet): 0xbBa5865b3E3A5033730f851d555cc922B74B25Fa
Next.js API route (/api/relayer) that receives check-in notifications and calls StreakMaster.updateStreak() on Base. Requires RELAYER_SECRET for authentication and RELAYER_PRIVATE_KEY for signing.
The Farcaster Frame (
/api/frame) usesuntrustedDataβ Farcaster signature verification is not yet implemented. See// TODOcomment in the route for production hardening.
- β DailyDrop deployed Celo + Base mainnet
- β DailyDropShield deployed Celo mainnet
- β StreakMaster + StreakNFT deployed Base mainnet
- β
Public REST API live β
/api/verify,/api/stats,/api/leaderboard,/api/agent - β
MCP Server live β
/api/mcp(x402 enforced on verify_batch) - β
A2A AgentCard v1.2.0 β
/.well-known/agent-card.json(full metadata, x402, OASF) - β
OpenAPI 3.1.0 β
/.well-known/openapi.json(x402Payment scheme, OASF) - β
@dailydrop/shieldv1.2.0 published on npm - β MiniPay compatible (auto-detect, force Celo, no modal, reconnect on failure, target="_self" links)
- β Farcaster Mini App (farcaster.json + frame endpoint)
- β G$ integration (GoodBuilders Season 4)
- β Leaderboard (Celoscan + Basescan, live on-chain)
- β AI streak coach (Claude Haiku 4.5 + deterministic fallback)
- β PWA (manifest + service worker)
- β Inline critical CSS shell for fast first paint
- β Fonts self-hosted via next/font (no render-blocking external requests)
- β Accessible viewport (user zoom enabled, WCAG 1.4.4 compliant)
MIT Β© 2026 @wkalidev
Built for the 1.4 billion unbanked Β· Powered by Celo Β· Proof of Presence Protocol