An onchain market where customers collectively fund a competitor to a product they hate.
Companies decide what gets built. EXIT lets customers decide.
EXIT turns customer frustration into a market. Users create an onchain pool for a product they want to replace, commit Monad Testnet MON behind a clear replacement brief, and let developers compete to build the better alternative.
This is a Build Anything Spark hackathon project running on Monad Testnet. Testnet MON is used only for hackathon demonstration and has no real value. A production/live version comes after the hackathon and, ideally, after winning.
People complain about bad products constantly:
- pricing gets hostile
- data exports are painful
- platforms lock users in
- support quality collapses
- roadmaps ignore the people paying
- alternatives never quite get funded
The internet is full of complaints, but complaints are not a market. Builders cannot easily tell which pain is worth solving, and users cannot coordinate around the replacement they actually want.
EXIT solves that coordination failure.
EXIT lets customers create a credible demand signal for a replacement product.
Instead of saying:
"I hate this product."
Users can say:
"Here is what needs to replace it, here are the acceptance criteria, and here is capital committed by people who want the exit."
That changes the conversation from noise to incentive.
-
Create an exit pool A user names the product or company they want to replace, explains the problem, defines the desired replacement, and writes acceptance criteria.
-
Commit testnet MON Contributors commit Monad Testnet MON to the pool. The commitment becomes voting power and proves demand for the replacement.
-
Developers compete Developers register for the pool and submit projects that try to satisfy the pool requirements.
-
Contributors vote Contributors vote for one submitted project or
None qualify. Voting power equals the contributor's total committed MON. -
Settle onchain If a project wins, the winning developer receives 90% of the committed pool and EXIT receives a 10% platform fee. If no project qualifies, contributors can claim refunds.
EXIT is designed around one question:
What if users could fund the exit before the replacement exists?
The market is created by combining:
- a public replacement request
- locked user commitments
- developer competition
- contribution-weighted voting
- objective settlement rules
- refund safety when nothing good ships
This makes EXIT different from a feature request board, bounty board, or complaint forum. The pool itself is the demand object.
The core contract is ExitMarket.
Normal pools:
- 30 day build period
- 10 day final voting period
- contributions and submissions freeze after the build deadline
- votes can be changed until the voting deadline
Hackathon demo pools:
- 60 second build period
- 30 second final voting period
- admin-only creation
- permanently labeled onchain as demo pools
Demo pools exist so judges can see the full lifecycle without waiting 40 days.
Settlement rules:
- contributors cannot also be developers in the same pool
- developers cannot commit or vote in the same pool
- voting power equals total committed MON
- top-ups automatically increase the wallet's active vote weight
- quorum passes at exactly 50% of committed MON participating
None qualifywins ties for safety- project ties are won by the earlier original submission
- successful pools pay 90% to the winner and 10% to the treasury
- failed pools use individual refunds to avoid unbounded payout loops
EXIT uses the chain for the parts that need public trust:
- pool creation
- commitment accounting
- developer registration
- project submissions
- voting
- quorum
- finalization
- payout
- refunds
There is no database acting as the source of truth. The smart contract is the market.
IPFS metadata is used for richer pool and project details. The contract stores metadata URIs and hashes so offchain content can be checked against onchain records.
| Item | Value |
|---|---|
| Network | Monad Testnet |
| Chain ID | 10143 |
| Currency | Testnet MON |
| Contract | 0xE651b144c78E58454E62578a495dE47bDBbFAD64 |
| Explorer | https://testnet.monadscan.com/address/0xE651b144c78E58454E62578a495dE47bDBbFAD64#code |
| Status | Hackathon testnet build |
EXIT is source-available for hackathon review, learning, personal experimentation, and non-commercial development.
Commercial use is not allowed without prior written permission from the project owner. That includes operating a production service, launching a paid or monetized derivative, rebranding EXIT, or using the contracts, interface, branding, or market design in a commercial product.
See LICENSE for the full terms.
The web app is a working marketplace, not a landing page.
It includes:
- marketplace tabs for Building, Final Voting, Ready to Finalize, Completed, and Failed pools
- search and category filtering
- structured pool creation
- optional initial commitment during pool creation
- wallet connection through Reown AppKit
- Pinata/IPFS metadata upload through a server-side route
- contributor commit and top-up flows
- developer registration
- project submission and update flows
- role-aware voting
- explicit
None qualifyvoting - finalization and refund states
- persistent Monad Testnet/test MON labeling
- Solidity
- Hardhat
- OpenZeppelin
- Next.js
- TypeScript
- Tailwind CSS
- wagmi
- viem
- Reown AppKit
- Pinata/IPFS
- Monad Testnet
.
├── apps
│ └── web # Next.js frontend
├── packages
│ └── contracts # Hardhat smart contracts
├── pnpm-workspace.yaml
└── package.json
Clone the repository:
git clone https://github.com/SouravBeraAkaSpeed/EXIT.git
cd EXITInstall dependencies:
pnpm installCreate a root .env file:
cp .env.example .envFor the web app, the important local values are:
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=...
NEXT_PUBLIC_EXIT_MARKET_ADDRESS=0xE651b144c78E58454E62578a495dE47bDBbFAD64
NEXT_PUBLIC_MONAD_TESTNET_RPC_URL=https://testnet-rpc.monad.xyz
PINATA_JWT=...Run the app:
pnpm devOpen:
http://localhost:3000
Run contract tests:
pnpm testBuild the web app:
pnpm --filter @exit/web run buildThe contract test suite covers:
- normal and demo deadlines
- admin-only demo pool creation
- initial commitments and top-ups
- contributor/developer role exclusion
- submission creation and updates
- build deadline enforcement
- contribution-weighted voting
- vote changes and post-vote top-ups
- exact 50% quorum boundary
None qualifyvictory and tie behavior- project tie resolution
- refund paths for failed pools
- exact 90/10 payout distribution
- double finalization prevention
- double refund prevention
- failed transfers
- reentrancy attempts
Current contract test result:
9 passing
For a successful demo, use at least two wallets:
- Wallet A: contributor
- Wallet B: developer
The same wallet cannot be both contributor and developer in the same pool. That separation is intentional because contributors decide what qualifies while developers compete for the payout.
Recommended hackathon demo:
- Create a demo pool.
- Commit testnet MON with Wallet A.
- Join as developer with Wallet B.
- Submit a replacement project with Wallet B.
- Vote for the project with Wallet A.
- Finalize after the demo voting deadline.
EXIT is intentionally testnet-only for the hackathon.
After validation, the production path can include:
- live deployment
- mainnet-ready risk controls
- better spam resistance
- richer pool discovery
- milestone-based payouts
- builder reputation
- demand analytics
- multi-asset commitments
- deeper IPFS indexing
EXIT is not a complaint board.
It is a coordination layer for credible exits.
When users hate a product enough to fund its replacement, builders should be able to see that demand, compete for it, and get paid by the people asking for the alternative.