Farcaster Mini App for hosting social contests on Base
NEYNARtodes lets you create contests tied to your Farcaster casts. Reward your community for engagement - likes, recasts, replies, and trading volume. Winners are selected randomly via Chainlink VRF.
Live App: farcaster.xyz/miniapps/uaKwcOvUry8F/neynartodes
NEYNARtodes is a gamified social engagement platform built on Farcaster and Base. Host contests, vote on your favorite creators, and earn rewards.
| Feature | Description |
|---|---|
| Create Contests | Lock ERC-20 or NFT prizes in escrow, set engagement requirements |
| NFT Contests | Award NFTs as prizes with built-in NFT picker from your wallet |
| Chainlink VRF | Provably fair random winner selection |
| Vote on Hosts | Upvote/downvote creators, burn tokens |
| Season Rewards | Top hosts win the prize pool |
- Open NEYNARtodes in Farcaster (via mini app or direct link)
- Connect with your Farcaster wallet
- You need:
- Whitelisted address (Season 0 Beta)
# Clone the repo
git clone https://github.com/YOUR_USERNAME/neynartodes-frame.git
cd neynartodes-frame/frame
# Install dependencies
npm install
# Run locally
vercel dev
# Deploy
vercel --prodCreate new contests with custom prizes and requirements.
Features:
- Start immediately or schedule for later
- Set duration (hours + minutes)
- Choose ERC-20 tokens or NFTs as prizes
- NFT Picker: Browse your wallet's NFTs with "My NFTs" button
- Require likes, recasts, and/or replies
- Optional trading volume requirement
View all past and active contests.
Features:
- See contest status (Active, Pending VRF, Completed)
- View winners with Farcaster profiles
- Track participant counts
- Monitor prize distributions
Vote on hosts and track season standings.
Features:
- Top 10 hosts ranked by score
- Upvote/downvote with NEYNARTODES
- 10 votes per day
- Season countdown and prize pool
- Post on Warpcast - Create your contest announcement cast
- Set Requirements - Define engagement needed (likes, recasts, replies)
- Lock Prize - Tokens held in escrow contract
- Wait for Entries - Participants engage with your cast
- Winner Selected - Chainlink VRF picks random winner
- Prize Distributed - Automatic transfer to winner
- Find a contest - Check announcements on Warpcast
- Engage - Like, recast, and reply as required
- Meet requirements - Trade volume if needed
- Wait - Winner selected when contest ends
- Win - Prize sent directly to your wallet
| Action | Cost | Effect |
|---|---|---|
| Upvote | 1000 NEYNARTODES | +200 points to host |
| Downvote | 1000 NEYNARTODES | -200 points from host |
Token Distribution:
- 50% burned (deflationary)
- 50% to treasury (prize pool)
Limits:
- 10 votes per day
- 1 vote per host per day
- Resets at midnight UTC
Total Score = Contest Score + Vote Score
Contest Score = Host Bonus + (Social × Contests) + Token
| Component | Formula |
|---|---|
| Host Bonus | 100 × completed contests |
| Social Score | (Likes×1 + Recasts×2 + Replies×3) × 100 |
| Social Multiplier | Social × completed contests |
| Token Score | Token Holdings ÷ 50,000 |
| Vote Score | (Upvotes - Downvotes) × 200 |
| Requirement | Value |
|---|---|
| Whitelist | Yes (74 beta testers) |
| Network | Base Mainnet |
| Safeguard | Purpose |
|---|---|
| Whitelist | Trusted beta testers only |
| Holder Qualification | 100M tokens = skip volume requirement |
| Reply Quality | 1+ words minimum |
| Volume Cap | Prevents gaming |
| Contract | Address |
|---|---|
| NEYNARTODES Token | 0x8de1622fe07f56cda2e2273e615a513f1d828b07 |
| Contest Escrow | 0x0A8EAf7de19268ceF2d2bA4F9000c60680cAde7A |
| Prize NFT V2 | 0x54E3972839A79fB4D1b0F70418141723d02E56e1 |
| Voting Manager V2 | 0x267Bd7ae64DA1060153b47d6873a8830dA4236f8 |
| Treasury V2 | 0xd4d84f3477eb482783aAB48F00e357C801c48928 |
Warpcast/Farcaster
|
v
NEYNARtodes Mini App (app.html)
|
+----+----+
| |
v v
Neynar Alchemy RPC
API |
v
Base Mainnet Contracts
|
v
Chainlink VRF v2.5
frame/
├── index.html # Frame entry point
├── app.html # Main Mini App
├── vercel.json # Vercel config
├── package.json # Dependencies
├── docs/
│ ├── CONTRACT_REGISTRY.md
│ ├── SYSTEM_ARCHITECTURE.md
│ ├── GUIDE_CREATE.md
│ ├── GUIDE_HISTORY.md
│ └── GUIDE_LEADERBOARD.md
└── api/
├── announce-winner.js # Winner announcement casts
├── check-eligibility.js # Participant validation
├── contest-history.js # Contest data fetching
├── finalize-contest.js # Contest finalization + VRF
├── get-user-nfts.js # NFT picker API (Alchemy)
├── image.js # Frame image generator
├── leaderboard.js # Leaderboard API
├── store.js # Consolidated storage API
└── lib/
├── config.js # Shared configuration
├── utils.js # Shared utilities
└── uniswap-volume.js # Volume calculations
| Document | Description |
|---|---|
| Contract Registry | All contract addresses and descriptions |
| System Architecture | Technical system design |
| Create Guide | How to create contests |
| History Guide | Understanding contest history |
| Leaderboard Guide | Voting and rankings |
| Deployment Guide | Deploy your own instance |
| Layer | Technology |
|---|---|
| Frontend | Vanilla JS + Tailwind CSS |
| Web3 | ethers.js v6 |
| Social | Neynar API (Farcaster) |
| NFT Data | Alchemy NFT API |
| Blockchain | Base Mainnet |
| Randomness | Chainlink VRF v2.5 |
| Storage | Vercel KV (Upstash Redis) |
| Hosting | Vercel |
| Analytics | Vercel Analytics |
Q: How are winners selected? A: Chainlink VRF provides a verifiable random number. Winner = qualified entries[random % count].
Q: Can I cancel a contest? A: Yes, before finalization. Prize returns to host.
Q: What if there are no qualified entries? A: Contest cannot finalize. Host can cancel and reclaim prize.
Q: How long does VRF take? A: Usually 1-3 minutes after contest ends.
Q: Can I host multiple contests? A: Yes, but Season 0 may have limits for non-dev wallets.
- Issues: GitHub Issues
- Farcaster: @neynartodes
- BaseScan: Check contract transactions
MIT
Built with by the NEYNARtodes team