IntentSwap is an on-chain conditional swap protocol where users define swap intents (for example, “swap when price > X”), and any executor can fill them once conditions are met.
Instead of manually timing the market, users specify what they want. Execution is permissionless by design, with a production-ready bot as the default executor.
🚀 What it does
- Create intents with token pair, amount, price threshold, and expiration
- Execute intents through
IntentExecutorwith protocol fee + executor reward - Use Chainlink price feeds for on-chain condition checks
- Route swaps through Uniswap V3 with slippage protection
- Index intent events into Postgres for fast query and dashboard UX
🔄 How it works (high-level)
- User creates intent on-chain via
IntentFactory.createIntent() apps/pipesindexes on-chain events (create/update/execute/cancel) into Postgresapps/apiserves GraphQL queries and auth-backed endpoints for the web appapps/botmonitors subscribed intents and callsexecuteIntent(intentId)when fillable- Contracts validate price/expiry and perform swap via Uniswap V3
🏗️ Architecture

🛠️ Tech Stack
| Category | Technology |
|---|---|
| Smart Contracts | Solidity, Hardhat, OpenZeppelin |
| Oracle + Swap | Chainlink Price Feeds, Uniswap V3 |
| Frontend | Next.js 16, React 19, TailwindCSS, shadcn/ui |
| Web3 Client | Wagmi, Viem, RainbowKit |
| API Layer | Cloudflare Workers, Hono, GraphQL Yoga, Pothos |
| Data + Auth | PostgreSQL, Drizzle ORM, Better Auth (SIWE) |
| Indexing + Execution | SQD Pipes (Subsquid), Cloudflare Worker cron + KV |
| Query Infrastructure | Urql, gql.tada, persisted GraphQL artifacts |
✨ Highlights
- Permissionless execution model: protocol allows any executor; bot is just default infra
- End-to-end data flow: on-chain events -> indexer -> Postgres -> GraphQL -> web dashboard
- Production-oriented monorepo: shared auth/db/artifacts packages across all apps
- Safer execution path: oracle-backed checks, slippage control, and pausable executor contract