Install Template
To get started, you can either clone the boilerplate repository for a quick setup or recreate it from scratch to better understand its structure.
π Template Repository
You can find the template here: GitHub - create-builder-codes-dapp
Option 1: Clone and Set Up the Repository
1οΈβ£ Clone the Repository
Run the following command to clone the template:
git clone https://github.com/Solynor/create-builder-codes-dapp.git
cd create-builder-codes-dapp
Then install dependencies:
pnpm install # or npm install
2οΈβ£ Change the Git Remote to Your Own Repository
To push your changes to a personal GitHub repository, update the remote URL:
git remote set-url origin git@github.com:your_name/repo_name.git
3οΈβ£ Configure the Environment Variables
Update the .env
file with your custom settings - RPC List:
# The environment mode (development=testnet / production=mainnet)
NEXT_PUBLIC_NODE_ENV=development
# The RPC URL for connecting to the HyperEVM
NEXT_PUBLIC_RPC_URL=your_rpc_url # [See RPC list on the doc]
# The builder's wallet address for fee collection
NEXT_PUBLIC_BUILDER_ADDRESS=your_builder_address # [Requires >100 USDC to enable the builder fee signer]
# The builder fee percentage (in basis points)
NEXT_PUBLIC_BUILDER_FEE=10 # (0.1%)
# The WalletConnect project ID for wallet connections
NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=your_wallet_connect_project_id # [Create your project ID here: https://docs.reown.com/cloud/relay]
4οΈβ£ Run the Application
Once everything is set up, start the development server:
pnpm dev # or npm run dev
Your application should now be up and running!
Option 2: Build from Scratch
While cloning the boilerplate is faster, this approach helps you better understand the appβs architecture and dependencies.
1. Install Next.js
Weβll start by setting up a new Next.js 15 project.
π Run the following command:
npx create-next-app@latest --use-pnpm
What is your project named? my-app
Would you like to use TypeScript? Yes
Would you like to use ESLint? Yes
Would you like to use Tailwind CSS? Yes
Would you like your code inside a `src/` directory? Yes
Would you like to use App Router? (recommended) Yes
Would you like to use Turbopack for `next dev`? Yes
Would you like to customize the import alias (`@/*` by default)? No
What import alias would you like configured? @/*
π Reference: Next.js Installation Guide
2. Project Structure
Your app will be structured as follows:
π app/
app/
Houses Next.js routes and pages.
Main entry point for the application.
π components/
components/
Stores reusable components for your pages.
π hooks/
hooks/
Contains custom React hooks for logic reuse (e.g.,
useAuth()
,useFetchData()
).
π lib/
lib/
config/
β Global settings (e.g., API URLs, environment variables).helpers/
β Utility functions (e.g.,formatDate()
,parseCookies()
).services/
β API call logic (e.g.,authService.ts
,userService.ts
).types/
β TypeScript interfaces for better type safety.
3. Install & Configure Wagmi (Wallet Connection)
Wagmi is used for wallet connections and blockchain interactions.
π Install dependencies:
pnpm add wagmi viem@2.x @tanstack/react-query
π Reference: Wagmi Documentation
π§ Modify the following files:
π lib/config/
index.ts
β Fetches configuration from.env
wagmi.ts
β Creates the Wagmi config using AppKit Documentation.pnpm add @reown/appkit @reown/appkit-adapter-wagmi
chain.ts
β Defines the Hyperliquid EVM testnetaxios.ts
β Installs and configures Axios for API callspnpm add axios
π components/
ContextProvider.tsx
β Wraps the app inWagmiProvider
and passes the config.UserProvider.tsx
β Manages user state based on wallet connection (wagmi
+localStorage
).π Note: Consider improving Builder Fee storage (DB or blockchain instead of local cache).
π lib/store.ts
(State Management)
Zustand is used to manage global state efficiently.
π Install Zustand:
pnpm add zustand
Responsibilities of store.ts
:
Define user-related state types (
User
,Agent
,UserStoreState
).Create Zustand store for updating, resetting, and accessing user data globally.
π Reference: Zustand Documentation
4. UI & Styling Setup
π Install required packages:
pnpm add tailwindcss-animate class-variance-authority clsx tailwind-merge lucide-react
π Reference: shadcn/UI Installation Guide
Configure UI files
tailwind.config.ts
β Customize Tailwind settings (Example)globals.css
β Define base styles (Example)lib/utils.ts
β Utility functions for stylingcomponents/ui/
β Copy & paste shadcn/UI components (e.g.,toast.tsx
,button.tsx
, etc.).
π Important: shadcn/UI is not a component libraryβit's a collection of reusable UI components that you copy manually.
π Reference: Radix UI (Shadcn's Base Library)
5. Blockchain Connection (Hyperliquid Integration)
Key Components:
π app/page.tsx
Displays either the trading widget (if connected) or the wallet connection button.
π components/
ConnectWallet.tsx
β Wraps aConnect Wallet
button using AppKit.Trade.tsx
β Trading widget for buying/selling assets.
π components/ApproveBuilderFee.tsx
Ensures users approve the Builder Fee before trading.
π lib/services/
approve-builder.ts
β Handles fee approval via Wagmi.πΉ Setup Instructions: Refer to the documentation Dapp Setup Guide for detailed steps on integrating your Dapp with the blockchain.
π lib/services/
builder-info.ts
β Calls Hyperliquid API/info
endpoint (API Docs).
6. Agent-Based Trading
Hyperliquid allows trading via an "agent" account.
Key Files:
components/ApproveAgent.tsx
Creates a new account (agent) for secure order placement without signing each time.
The agent cannot move user funds, making it a safer approach.
lib/services/approve-agent.ts
Calls Hyperliquid Exchange API for agent approval.
π Security Note: The agentβs private key is generated locallyβensure itβs never exposed or stored insecurely.
7. Order Execution
Handles placing, signing, and submitting trades.
Key Services:
market-order.ts
β/exchange
(trade execution)mid-price.ts
β/info
(retrieves real-time mid-prices)balances.ts
β/info
(fetches user balances)token-details.ts
β/info
(retrieves token metadata)signing.ts
β Uses MessagePack for encoding.pnpm add @msgpack/msgpack
8. Final Steps: ESLint & Configuration
π Update ESLint rules (eslint.config.mjs
):
jsCopierModifierrules: {
"@typescript-eslint/no-unused-vars": "warn",
"@typescript-eslint/ban-ts-comment": "warn",
}
π Modify Next.js config (next.config.ts
)
Check the example file.
Conclusion
By following this guide, youβve built the Builder Codes Dapp from scratch, gaining a deep understanding of:
β Next.js & TypeScript setup β Wallet connection & Wagmi configuration β API integration with Hyperliquid β Trading execution with agent-based security β UI & state management with shadcn/UI & Zustand
Last updated