Search projects, hackathons, sponsors and tech

    ← All projects

    Demo

    About

    The problem it solves ## Problem It Solves ### The Trust Problem in Online Gaming Traditional online betting platforms operate as black boxes. Players have no way to verify if outcomes are fair, if the house is manipulating results, or if their funds are actually secure. You're essentially trusting a faceless operator with your money. ### How TrustMeBro Fixes This **Provably Fair Outcomes** Every game uses a commit-reveal scheme. The result is determined *before* you play, and you can verify it on-chain after. No manipulation possible. **Non-Custodial Play** Your funds stay in your wallet until you bet. No deposits to sketchy platforms. No withdrawal delays. Cash out instantly, anytime. **Transparent Odds** The multiplier formula is public: `1 / (1 - 1/n)`. You know exactly what you're getting into. 2 tiles = 2x multiplier, 50% survival. Simple math, no hidden edges. **On-Chain Verification** Every game, every outcome, every payout is recorded on the blockchain. Audit it yourself. The smart contract is the house, and the house can't cheat. ### The Game Navigate 20 rounds of tile selection. Each round has 2-5 tiles with one death tile hidden among them. Survive = multiply your bet. Hit the death tile = lose everything. Cash out anytime or push your luck for bigger rewards. *It's not about trusting us. It's about verifying it yourself.*

    How it's made

    Challenges we ran into ## Challenges I Ran Into ### Prisma 7 Database Connection Issues Prisma 7 introduced a new adapter-based connection system that broke our existing Neon PostgreSQL setup. The error "No database host or connection string was set" kept appearing despite correct configuration. Had to downgrade to Prisma 6.19.0 and revert to the traditional `url = env("DATABASE_URL")` approach. ### Smart Contract Transaction Flow Figuring out who signs what was tricky. The contract uses `onlyBackend` modifiers for `cashOut()` and `markGameAsLost()` functions, meaning the frontend can't call these directly. Had to restructure the backend to handle contract calls server-side while keeping `createGame()` as a user-signed transaction. ### Commit-Reveal Scheme Implementation Ensuring provable fairness required careful coordination between frontend, backend, and smart contract. The seed must be generated before the game, hashed for commitment, stored securely, and only revealed after game completion — all while keeping the flow seamless for users. ### Farcaster Frame Integration Getting the OG image to render in cast embeds was painful. Next.js `ImageResponse` requires explicit `display: 'flex'` on every div with multiple children. Also had to separate the base URL (for OG images) from the miniapp URL (for CTA links) since Farcaster fetches metadata from the embed URL directly. ### Farcaster SDK vs URL Redirect Initially used Warpcast URL intents for sharing, but this opened a redirect and allowed users to edit cast text. Switched to `sdk.actions.composeCast()` for native in-app casting with pre-filled content and frame embeds. ### Environment Configuration for Vercel Managing multiple URLs was confusing — Vercel domain for API/OG routes, Farcaster miniapp URL for user-facing links, and local tunnel URLs for testing. Had to introduce separate `NEXT_PUBLIC_BASE_URL` and `NEXT_PUBLIC_APP_URL` environment variables.