Most dApps fail not because the contracts are wrong, but because the application built around them is unusable.
A DeFi protocol with correct contracts and a frontend that shows raw transaction hashes, gives no feedback during pending states, and requires users to understand gas estimation will not get adopted — regardless of how good the underlying protocol is. Web3 UX problems are engineering problems. Pending transaction states require streaming event subscriptions. Correct token balances require an indexer, not direct on-chain reads for every page load. Wallet connection that works across Metamask, Rabby, mobile wallets and WalletConnect requires a well-configured wallet connection library. These are all solved engineering problems. PROPELOO builds dApps where the blockchain complexity is handled by the application layer, not offloaded to the user.
Frequently Asked Questions
What is wagmi and why do you recommend it?
wagmi is a React hooks library for Ethereum — it provides hooks for reading contract state (useReadContract), writing to contracts (useWriteContract), managing wallet connections, handling transaction status and managing chain state. It abstracts the low-level viem/ethers.js complexity into composable React hooks with built-in caching, refetching and error handling. Combined with RainbowKit for wallet UI, it handles 90% of the boilerplate in EVM dApp development.
What is The Graph and do we need it?
The Graph is a decentralised indexing protocol for blockchain data. You write a "subgraph" that defines which contract events to index and how to transform them into queryable entities. This allows you to query historical data (all trades in the last 7 days, current LP positions for an address, all NFTs owned by a wallet) with GraphQL instead of making hundreds of individual RPC calls. Any dApp with historical data requirements or complex aggregation needs The Graph or a custom indexer. Direct RPC calls cannot efficiently provide this data.
How do you handle transactions that fail?
Transaction failure handling has three layers: (1) simulate before submit — use Tenderly or local Foundry fork to predict success before broadcasting; (2) decode revert reasons — contract reverts include revert reason strings that should be mapped to user-friendly messages ("Insufficient allowance" not "execution reverted: ERC20: insufficient allowance"); (3) retry logic — network congestion failures should offer automatic retry with higher gas. Users should never see raw error strings or wonder why their transaction failed.
How do we support mobile wallets?
WalletConnect v2 is the protocol for connecting mobile wallets (MetaMask Mobile, Trust Wallet, Rainbow, Coinbase Wallet) to desktop dApps via QR code or deep link. RainbowKit and ConnectKit both integrate WalletConnect v2 automatically. For mobile-first dApps where users will primarily use in-app browsers: detect the in-app browser and connect to the injected provider (window.ethereum) directly, falling back to WalletConnect for external wallet apps.
What is transaction simulation and why does it matter?
Transaction simulation executes the transaction against a fork of the current chain state without broadcasting it — predicting whether it will succeed or fail and what its effects will be. This allows the dApp to show the user exactly what will happen before they pay gas: tokens they will receive, positions that will change, approvals that will be set. Tenderly's simulation API and Foundry's fork mode both support this. Simulation before submission is the single largest improvement to DeFi UX.
How do we handle multiple chains?
Multi-chain dApps require: a chain configuration registry mapping chain IDs to RPC endpoints, contract addresses and block explorers; a chain detection hook that reads the connected wallet's current chain; automatic network switch prompts when the user is on the wrong chain; and separate subgraph deployments per chain for indexed data. wagmi v2 has native multi-chain support built in. The UI should clearly display which chain the user is connected to and which chain the action will execute on.
What RPC providers do you recommend?
Alchemy for primary RPC — reliable, good rate limits, excellent developer tooling (simulation API, NFT API, token API). Infura as fallback — different infrastructure from Alchemy, so unlikely to fail simultaneously. QuickNode for WebSocket subscriptions if heavy real-time event usage. Never use public RPC endpoints (rpc.ankr.com, cloudflare-eth.com) for production — they are rate-limited aggressively and have no reliability guarantees. Budget approximately $50–200/month for RPC services for a production dApp.
How long does a dApp take to build?
Simple dApp (token staking, basic swap interface, NFT minting UI): 3–5 weeks. Medium complexity (DeFi protocol frontend with position management, DAO governance interface): 6–10 weeks. Complex dApp (multi-chain DEX, full DeFi dashboard, P2E game frontend): 3–6 months. Timeline is significantly affected by contract readiness — dApp development can begin before contracts are finalised using mock ABIs, but the final integration phase requires stable contract interfaces.