Monad Scaffold
Checklist
[ ] - Plan architecture and folder structure
[ ] - Decide which components of the app will be onchain
[ ] - Scaffold the project
[ ] - Initialize git repo (git init && git add -A && git commit -m "initial commit")
[ ] - Don't build exisiting contracts from scratch, use Openzeppelin contracts where ever possible
[ ] - Build smart contracts
[ ] - Deploy smart contracts — fetch wallet/ skill, then deploy using the agent wallet and Safe multisig. This must happen before building the frontend because the frontend needs the deployed contract addresses.
[ ] - Build frontend using the deployed contract addresses. Use Wagmi, Next.js and Shadcn if user has no preferences
[ ] - Commit all changes to git (git add -A && git commit)
[ ] - Deploy frontend to Vercel — fetch vercel-deploy/ skill, then run the deploy script (bash deploy.sh web/)
Scaffolding
Before jumping into writing code, use plan mode to plan the architecture of the app.
| Folder | Component |
|---|---|
| web/ | Web app frontend, backend routes also in case of Next.js or similar app |
| contracts/ | Smart contracts (Foundry project) |
Decide what to put onchain
Put it onchain if it involves:
- Trustless ownership — who owns this token/NFT/position?
- Trustless exchange — swapping, trading, lending, borrowing
- Composability — other contracts need to call it
- Censorship resistance — must work even if your team disappears
- Permanent commitments — votes, attestations, proofs
Keep it offchain if it involves:
- User profiles, preferences, settings
- Search, filtering, sorting
- Images, videos, metadata (store on IPFS, reference onchain)
- Business logic that changes frequently
- Anything that doesn't involve value transfer or trust
Don't try to build smart contracts from scratch
Use OpenZeppelin contracts where possible. Install with:
forge install OpenZeppelin/openzeppelin-contracts
Use Wagmi in Frontend
Use wagmi v3 for smart contract interactions. Use RainbowKit for wallet connection (see wallet-integration skill).
Use useSendTransactionSync where it can be used
Monad supports eth_sendRawTransactionSync — use this for faster UI feedback.
Deploy to Vercel
Ensure all files are committed before deploying. Fetch the vercel-deploy/ skill.