--- name: scaffold description: End to end guide to take an idea build an app to production, if you are starting an app from scratch this skill must be fetched first. --- ## 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: ```bash 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. Skill URL: https://monskills.vercel.app/scaffold/SKILL.md