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

  1. Market Creation - Anyone can create a Yes/No prediction market with a deadline
  2. Prediction Placement - Bet USDC on Yes or No, with optional timestamp guess
  3. Timestamp Bonus - Guess the exact time the event happens for bonus rewards
  4. Bounty System - 10% of pool goes to whoever makes the event happen
  5. Proof Submission - Upload photo evidence when claiming a bounty
  6. 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

Share this project:

Updates