Ticket insurance for the game you attended but wish you hadn't


Prize Pool
When fans buy tickets to a game, they are not only paying for a seat. They are paying to have a good night.
But that is not always what happens. Imagine spending hundreds or even thousands of dollars to watch your team, only for them to lose 5–0. The ticket worked, but the experience you paid for did not.
FanGuard is ticket insurance for the game you attended but wish you hadn’t.
FanGuard appears while you are buying your ticket and lets you protect your night with one tap. You pay a small amount for coverage, and if your team has a clearly defined terrible result, your ticket money is automatically paid back to you.
There are no claim forms and no subjective decisions. The conditions are agreed before the game, and the final score decides whether the policy pays.
Behind the scenes, FanGuard uses prediction markets to price and fund the protection. These markets already price the probability of different sports outcomes. We take the corresponding position and package it into a product that feels like normal insurance.
The fan never needs to use a prediction market, choose a bet, manage a position, or understand crypto. They only see a simple offer: protect your night.
If the game goes well, they enjoy the experience they paid for. If it becomes the kind of game they wish they had never attended, FanGuard makes the ticket free.
FanGuard is a pnpm + Turborepo monorepo. The checkout is a Next.js 16 app talking to a hand-rolled Solidity vault, CoverPool, that I deployed to Polygon mainnet. No OpenZeppelin, just EIP-712 signed quotes so the settler prices every policy off-chain and the contract trusts only the signature. A fan taps once to insure their night. Dynamic gives them an embedded wallet, Fireblocks Flow settles the USDC.e premium, and when they’re short on funds Blink drops an add-money step onto the page so USDC lands on Polygon and they pay in the same flow. Every premium is hedged on Polymarket via the CLOB client, so payouts come from the offsetting position, not the house. The gameId is a deterministic keccak of fixture plus insured team, so openGame, buyPolicy and resolve all derive the same id with no registry. The scoreboard is the claim.

