Inspiration
We wanted to create a safer way for people to transact online — especially in situations where trust is uncertain. Traditional platforms often feel outdated, expensive, or hard to integrate into new applications. So we set out to build a modern, developer-friendly escrow system with a clean UI, smooth authentication, and real-time data handling.
What it does
Bond is a secure escrow application that allows two or more parties to create an agreement, deposit funds, and release them only when conditions are met. It provides:
- User authentication via email OTP
- Real-time updates through Convex
- A clean, responsive UI for creating and managing escrow sessions
- Actions to initiate, fund, approve, or dispute an agreement
- A modular structure so developers can plug it into any workflow
How we built it
We built Bond using a full TypeScript stack:
- Frontend: React + Vite for a fast, modern development experience
- Styling: Tailwind v4 + Shadcn UI for flexible components
- Backend & Database: Convex for real-time queries, mutations, and serverless functions
- Auth: Convex Auth (email OTP + anonymous support)
- Animations: Framer Motion for smooth transitions
- Routing: React Router v7
- Everything is tied together with a consistent, type-safe model from frontend to backend.
Challenges we ran into
- Configuring Convex Auth and integrating OTP flows smoothly into the UI
- Making sure authorization logic was secure on both client and server
- Structuring the database schema to keep escrow states consistent
- Handling real-time updates without creating duplicate or conflicting actions
- Ensuring the UI stayed responsive and clean across different devices
Accomplishments that we're proud of
- A fully working escrow flow from account creation to fund release
- Integrated multiple options for the blockchains, including Ethereum/Polygon and Polkadot
- A clean, modern interface built with reusable components
- Real-time data synchronization that feels instant
- Type-safe, scalable code that other developers can extend
- Robust authentication without needing OAuth or external identity providers
What we learned
- How to architect real-time applications using Convex
- The importance of enforcing authorization at every layer
- Best practices for building reusable UI systems with Tailwind and Shadcn
- How to optimize component structure for clarity and maintainability
- How to manage multi-party workflows in a secure and predictable way
What's next for Bond
- Adding dispute-resolution flows with moderator controls
- Supporting more payment providers and currencies
- Offering escrow templates (services, rentals, freelance work, etc.)
- Building an admin dashboard for monitoring active agreements
- Expanding authentication options to include OAuth providers
- Deploying a production-ready version with full documentation
Built With
- convex
- framer
- react
- typescript
- vite
Log in or sign up for Devpost to join the conversation.