Manifest: A Prediction Market Mini App for MBC
🎯 What We Built
Manifest is a prediction market mini app built for the Midwest Blockchain Conference (MBC). Users can bet on real-world outcomes happening at the conference—like "Will Jesse get pied in the face?" or "Will someone build a snowman in the Ross building?"—and earn rewards for correct predictions.
The twist? We added a bounty system: 10% of all bets go to the person who actually makes the event happen. So if you pie Jesse in the face, you claim the bounty pool.
Live Demo: mbc-hackathon.vercel.app
💡 Inspiration
Traditional prediction markets like Polymarket focus on global events—elections, sports, crypto prices. But what about hyper-local, fun predictions at a conference?
We wanted to create something that:
- Makes conferences more interactive and engaging
- Rewards people for creating memorable moments
- Uses crypto for trustless, transparent payouts
- Works natively inside Farcaster/Warpcast as a mini app
The bounty mechanic was inspired by thinking: what if the prediction market itself could incentivize making things happen?
🛠️ How We Built It
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 15, React 19, TypeScript |
| Wallet | OnchainKit, wagmi, viem |
| Mini App | Farcaster MiniKit SDK |
| Network | Base Sepolia (testnet) |
| State | TanStack React Query |
| Styling | CSS Modules with custom dark theme |
Architecture
The app runs as a Farcaster Mini App inside Warpcast/Base app. The frontend connects to a PredictionMarket smart contract on Base Sepolia that handles market creation, predictions, and payouts. OnchainKit provides wallet connection and MiniKit SDK handles Farcaster context (user identity, FID).
Core Features
- Market Creation - Anyone can create a Yes/No prediction market with a deadline
- Prediction Placement - Bet USDC on Yes or No, with optional timestamp guess
- Timestamp Bonus - Guess the exact time the event happens for bonus rewards
- Bounty System - 10% of pool goes to whoever makes the event happen
- Proof Submission - Upload photo evidence when claiming a bounty
- Admin Verification - Contract admin verifies proofs and resolves markets
🧗 Challenges We Faced
1. SSR + localStorage in Next.js 15
Node.js 21+ has an experimental localStorage global that exists but doesn't work properly. This caused cryptic errors during server-side rendering. We solved it by creating browser detection wrappers around all localStorage calls and an instrumentation.ts polyfill.
2. OnchainKit Wallet Dropdown Styling
The OnchainKit wallet dropdown had CSS conflicts causing overlapping text and misaligned icons. The generated class names were dynamic and hard to target. We used wildcard CSS selectors with !important overrides to fix the layout.
3. Farcaster Mini App Manifest Validation
The /.well-known/farcaster.json manifest has strict validation—no special characters in descriptions, ogTitle max 30 characters, exact accountAssociation signature matching. Multiple iterations were needed to meet all rules.
4. React 19 + wagmi Hydration
React 19's stricter hydration checks conflicted with wallet state that only exists client-side. We solved it by delaying rendering until client-side mount using a ready state flag.
📊 Data Model
Markets have a question, deadline, yes/no pools, bounty pool (10% of bets), and resolution status. Predictions track the user address, their yes/no choice, bet amount, and optional timestamp guess. Proof submissions allow users to upload photo evidence when claiming bounties.
🎨 Design Decisions
- Dark theme with electric cyan/green accents (#06d6a0)
- Mobile-first responsive design for in-app viewing
- Animated odds bars showing real-time market sentiment
- Glowing borders on hover for card interactivity
- CSS Modules for scoped, maintainable styles
🚀 What's Next
- Deploy smart contract to Base mainnet
- Add Polymarket integration for hybrid markets
- Implement timestamp bonus payouts
- Add social sharing when placing bets
- Notification webhooks for market resolution
🙏 Built At
Midwest Blockchain Conference 2025 - Built in ~24 hours as a hackathon project.
Stack: Next.js 15 • React 19 • TypeScript • OnchainKit • Farcaster MiniKit • Base
Log in or sign up for Devpost to join the conversation.