A minimal dApp is four states: disconnected, wrong network, ready, and pending. Each needs a clear UI. Reads populate the view; writes go through connect, chain check, simulate, send, wait, refresh.
if (!account) return <Connect />; if (chainId !== 84532) return <SwitchNetwork />;
Show the transaction hash immediately, link to the explorer, and refresh state only after the receipt.