From monskills
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.
npx claudepluginhub therealharpaljadeja/monskills --plugin monskillsThis skill uses the workspace's default tool permissions.
[ ] - Plan architecture and folder structure
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides MCP server integration in Claude Code plugins via .mcp.json or plugin.json configs for stdio, SSE, HTTP types, enabling external services as tools.
[ ] - 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.
[ ] - Verify smart contracts post deployment — use the verification API to verify on all explorers with one call.
[ ] - 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/)
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 (if the user does not have a preference go with Next.js and shadcn components) |
| contracts/ | Smart contracts (could be a Foundry project, if the user does not have a preference use Foundry) |
Put it onchain if it involves:
Keep it offchain if it involves:
Judgment calls:
It is very likely that depending on the usecase of the smart contract, there is an Openzeppelin smart contract available to build on top of instead of building from scratch.
For example: Don't rebuild ERC20, ERC721 and other well known token types from scratch build on top of Openzeppelin contracts since they are heavily audited.
All Openzeppelin smart contracts can be found here: https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts and you can use the below command to install it (Foundry should be already installed).
forge install OpenZeppelin/openzeppelin-contracts
Use the wagmi v3 library for making smart contracts from Frontend.
For wallet connection use Rainbowkit, there is a skill file for the same named wallet-integration.
Monad supports eth_sendRawTransactionSync RPC method and useSendTransactionSync uses that RPC method to send transaction and get the receipt in the same function call, that way the UI can be much more fast.
ALWAYS use the verification API. It verifies on all 3 explorers (MonadVision, Socialscan, Monadscan) with one call. Do NOT use forge verify-contract as your first choice.
After deploying, get two pieces of data:
# 1. Standard JSON input (all source files)
forge verify-contract <ADDR> <CONTRACT> \
--chain 10143 \
--show-standard-json-input > /tmp/standard-input.json
# 2. Foundry metadata (from compilation output)
cat out/<Contract>.sol/<Contract>.json | jq '.metadata' > /tmp/metadata.json
STANDARD_INPUT=$(cat /tmp/standard-input.json)
FOUNDRY_METADATA=$(cat /tmp/metadata.json)
cat > /tmp/verify.json << EOF
{
"chainId": 10143,
"contractAddress": "0xYOUR_CONTRACT_ADDRESS",
"contractName": "src/MyContract.sol:MyContract",
"compilerVersion": "v0.8.28+commit.7893614a",
"standardJsonInput": $STANDARD_INPUT,
"foundryMetadata": $FOUNDRY_METADATA
}
EOF
curl -X POST https://agents.devnads.com/v1/verify \
-H "Content-Type: application/json" \
-d @/tmp/verify.json
Add constructorArgs (ABI-encoded, WITHOUT 0x prefix).
Example:
# Get constructor args
ARGS=$(cast abi-encode "constructor(string,string,uint256)" "MyToken" "MTK" 1000000000000000000000000)
# Remove 0x prefix
ARGS_NO_PREFIX=${ARGS#0x}
# Add to request
"constructorArgs": "$ARGS_NO_PREFIX"
| Parameter | Required | Description |
|---|---|---|
chainId | Yes | 10143 (testnet) or 143 (mainnet) |
contractAddress | Yes | Deployed contract address |
contractName | Yes | Format: path/File.sol:ContractName |
compilerVersion | Yes | e.g., v0.8.28+commit.7893614a |
standardJsonInput | Yes | From forge verify-contract --show-standard-json-input |
foundryMetadata | Yes | From out/<Contract>.sol/<Contract>.json > .metadata |
constructorArgs | No | ABI-encoded args WITHOUT 0x prefix |
Only use this if the API fails.
Testnet:
forge verify-contract <ADDR> <CONTRACT> --chain 10143 \
--verifier sourcify \
--verifier-url "https://sourcify-api-monad.blockvision.org/"
Mainnet:
forge verify-contract <ADDR> <CONTRACT> --chain 143 \
--verifier sourcify \
--verifier-url "https://sourcify-api-monad.blockvision.org/"
Before deploying, ensure all files are committed to git (git add -A && git commit). The deploy script archives only git-tracked files, so uncommitted or untracked files will not be included in the deployment.
Fetch the vercel-deploy/ skill for deployment instructions. It deploys to Vercel without requiring CLI installation or authentication.
| I'm doing... | Fetch these skills |
|---|---|
| Choosing a blockchain to build on | why-monad/ |
| Writing smart contracts | addresses/ |
| Agent wallet management, deploy smart contracts or perform onchain actions | wallet/ |
| Adding wallet connect to a frontend | wallet-integration/ |
| Building an app from scratch (idea to production) | scaffold/ (this) |