ctaShare Your Requirements
Home
Home
ReactJS Developer

Hire the Best ReactJS Developer

Whether you’re developing a new web application or enhancing an existing one, ReactJS offers the flexibility to build scalable web applications with interactive user interfaces and seamless API integration. You get custom ReactJS solutions designed for high performance, responsive design, and long-term maintainability. When you hire ReactJS developers, you gain applications that adapt easily, engage users, and align with your evolving business needs.

View More

Pranav Kakkar Oodles
Technical Project Manager
Pranav Kakkar
Experience 9+ yrs
ReactJS Python Java +35 More
Know More
Pranav Kakkar Oodles
Technical Project Manager
Pranav Kakkar
Experience 9+ yrs
ReactJS Python Java +35 More
Know More
Divyansh Kumar Sharma Oodles
Sr. Lead- Frontend Development
Divyansh Kumar Sharma
Experience 4+ yrs
ReactJS Android Developer iOS Developer +15 More
Know More
Divyansh Kumar Sharma Oodles
Sr. Lead- Frontend Development
Divyansh Kumar Sharma
Experience 4+ yrs
ReactJS Android Developer iOS Developer +15 More
Know More
Devashish Trehan Oodles
Sr. Lead- Frontend Development
Devashish Trehan
Experience 6+ yrs
ReactJS Vue.js HTML, CSS +3 More
Know More
Devashish Trehan Oodles
Sr. Lead- Frontend Development
Devashish Trehan
Experience 6+ yrs
ReactJS Vue.js HTML, CSS +3 More
Know More
Siddharth Badola Oodles
Sr. Lead- Frontend Development
Siddharth Badola
Experience 4+ yrs
ReactJS HTML, CSS OptaPlanner +2 More
Know More
Siddharth Badola Oodles
Sr. Lead- Frontend Development
Siddharth Badola
Experience 4+ yrs
ReactJS HTML, CSS OptaPlanner +2 More
Know More
Prahalad Singh  Ranawat Oodles
Lead Development
Prahalad Singh Ranawat
Experience 6+ yrs
ReactJS PHP WordPress +32 More
Know More
Prahalad Singh  Ranawat Oodles
Lead Development
Prahalad Singh Ranawat
Experience 6+ yrs
ReactJS PHP WordPress +32 More
Know More
Akriti Tiwari Oodles
Lead QA
Akriti Tiwari
Experience 4+ yrs
ReactJS QA Python +32 More
Know More
Tushar Sethi Oodles
Associate Consultant L2- Development
Tushar Sethi
Experience 1+ yrs
ReactJS Python Django +3 More
Know More
Abhay Maddheshiya Oodles
Associate Consultant L2 - Frontend Development
Abhay Maddheshiya
Experience 1+ yrs
ReactJS Python Node.js +19 More
Know More
Om Prakash Oodles
Associate Consultant L2 - Frontend Development
Om Prakash
Experience 1+ yrs
ReactJS Python Angular +10 More
Know More
Aman Singh Oodles
Associate Consultant L2 - Frontend Development
Aman Singh
Experience 2+ yrs
ReactJS Angular HTML, CSS +2 More
Know More
Rahul Kumar Maurya Oodles
Associate Consultant L2 - Frontend Development
Rahul Kumar Maurya
Experience 2+ yrs
ReactJS MERN Stack HTML, CSS +7 More
Know More
Akhalesh Kumar Oodles
Associate Consultant L2- Development
Akhalesh Kumar
Experience 2+ yrs
ReactJS Node.js HTML, CSS +6 More
Know More
Rohit Kumar Gola Oodles
Associate Consultant L2 - Frontend Development
Rohit Kumar Gola
Experience 2+ yrs
ReactJS HTML, CSS JavaScript +9 More
Know More
Akash Bhardwaj Oodles
Associate Consultant L2 - Frontend Development
Akash Bhardwaj
Experience 2+ yrs
ReactJS Web3.js Node.js +15 More
Know More
Nitin Joshi Oodles
Associate Consultant L2 - Frontend Development
Nitin Joshi
Experience 2+ yrs
ReactJS HTML, CSS JavaScript
Know More
Gyandeep Kumar Oodles
Associate Consultant L1 - Frontend Development
Gyandeep Kumar
Experience Below 1 yr
ReactJS Android Developer iOS Developer +16 More
Know More
Deepak Yadav Oodles
Associate Consultant L1- Frontend Development
Deepak Yadav
Experience 2+ yrs
ReactJS PHP MEAN +15 More
Know More
Varun Pal Oodles
Associate Consultant L1 - Development
Varun Pal
Experience 2+ yrs
ReactJS PHP Python +19 More
Know More
Avinash Singh Oodles
Associate Consultant L1- Frontend Development
Avinash Singh
Experience 1+ yrs
ReactJS WordPress HTML, CSS +3 More
Know More
Vishal Kumar Oodles
Associate Consultant L1 - Frontend Development
Vishal Kumar
Experience Below 1 yr
ReactJS MEAN HTML, CSS +8 More
Know More
Yogesh Sharma Oodles
Associate Consultant L1 - Development
Yogesh Sharma
Experience 2+ yrs
ReactJS Python HTML, CSS +7 More
Know More
Mohammad Owais Oodles
Associate Consultant L1 - Development
Mohammad Owais
Experience 1+ yrs
ReactJS Python Django +3 More
Know More
Animesh Pandey Oodles
Associate Consultant L1 - Development
Animesh Pandey
Experience 1+ yrs
ReactJS Python LangChain +9 More
Know More
Tanvi Dubey Oodles
Associate Consultant L1 - Development
Tanvi Dubey
Experience 1+ yrs
ReactJS Python React Native +14 More
Know More
Asmit Alok Oodles
Associate Consultant L1 - Frontend Development
Asmit Alok
Experience 1+ yrs
ReactJS Python HTML, CSS +2 More
Know More
Ranjan Kumar Oodles
Associate Consultant L1 - Development
Ranjan Kumar
Experience Below 1 yr
ReactJS Python Odoo +15 More
Know More
Arun Singh Oodles
Associate Consultant L1 - Frontend Development
Arun Singh
Experience 1+ yrs
ReactJS Python JavaScript +3 More
Know More
Sagar Shivhare Oodles
Associate Consultant L1 - Development
Sagar Shivhare
Experience Below 1 yr
ReactJS Python Java +5 More
Know More
Gautam Gupta Oodles
Associate Consultant L1 - Development
Gautam Gupta
Experience 1+ yrs
ReactJS Java Node.js +13 More
Know More
Himanshu Nainwal Oodles
Associate Consultant L1 - Development
Himanshu Nainwal
Experience 1+ yrs
ReactJS Java Salesforce +6 More
Know More
Manmohan Dwivedi Oodles
Associate Consultant L1 - Development
Manmohan Dwivedi
Experience 1+ yrs
ReactJS Java Node.js +19 More
Know More
Akshay Jain Oodles
Associate Consultant L1 - Frontend Development
Akshay Jain
Experience 1+ yrs
ReactJS React Native HTML, CSS +6 More
Know More
Vishwas Saxena Oodles
Associate Consultant L1 - Frontend Development
Vishwas Saxena
Experience Below 1 yr
ReactJS React Native MERN Stack +5 More
Know More
Komal Upadhyay Oodles
Associate Consultant L1 - Frontend Development
Komal Upadhyay
Experience Below 1 yr
ReactJS Angular HTML, CSS +4 More
Know More
Shahrukh Iftekhar Oodles
Associate Consultant L1 - Frontend Development
Shahrukh Iftekhar
Experience Below 1 yr
ReactJS Angular HTML, CSS +2 More
Know More
Tanishka Verma Oodles
Associate Consultant L1 - Frontend Development
Tanishka Verma
Experience 1+ yrs
ReactJS Angular MERN Stack +4 More
Know More
Kapil Dagar Oodles
Associate Consultant L1 - Development
Kapil Dagar
Experience 1+ yrs
ReactJS Node.js JavaScript +3 More
Know More
Rahul Kumar Oodles
Associate Consultant L1- Frontend Development
Rahul Kumar
Experience 1+ yrs
ReactJS HTML, CSS JavaScript +1 More
Know More
Md Aseer Oodles
Associate Consultant L1- Frontend Development
Md Aseer
Experience 1+ yrs
ReactJS MERN Stack CSS +4 More
Know More
Akshay kumar Dubey Oodles
Associate Consultant L1 - Frontend Development
Akshay kumar Dubey
Experience 1+ yrs
ReactJS Node.js HTML, CSS +2 More
Know More
Kuldeep Kant Oodles
Associate Consultant L1- Frontend Development
Kuldeep Kant
Experience 1+ yrs
ReactJS Node.js JavaScript +5 More
Know More
Neeraj Shukla Oodles
Assistant Consultant - Frontend Development
Neeraj Shukla
Experience Below 1 yr
ReactJS MERN Stack JavaScript +4 More
Know More
Nishant Thakur Oodles
Intern - Frontend Development
Nishant Thakur
Experience Below 1 yr
ReactJS PHP Python +11 More
Know More
Rijul Jain Oodles
Sr. Vice President- Technology
Rijul Jain
Experience 13+ yrs
ReactJS Python Java +13 More
Know More
Akash Mall Oodles
Assistant Vice President - Technology
Akash Mall
Experience 10+ yrs
ReactJS Python Java +30 More
Know More
Sonu Kumar Kapar Oodles
Senior Associate Consultant L1 - Development
Sonu Kumar Kapar
Experience 3+ yrs
ReactJS Python Node.js +35 More
Know More
Roshan Jha Oodles
Senior Associate Consultant L1 - Development
Roshan Jha
Experience 1+ yrs
ReactJS Python JavaScript +6 More
Know More
Vikas Sanwal Oodles
Senior Associate Consultant L1 - Development
Vikas Sanwal
Experience 3+ yrs
ReactJS Python Django +20 More
Know More
Vishal Yadav Oodles
Sr. Associate Consultant L1 - Frontend Development
Vishal Yadav
Experience 7+ yrs
ReactJS Python Django +8 More
Know More
Mohd Sajid Oodles
Sr. Associate Consultant L1 - Frontend Development
Mohd Sajid
Experience 2+ yrs
ReactJS Python Java +8 More
Know More
Nilesh Kumar Oodles
Sr. Associate Consultant L1 - Frontend Development
Nilesh Kumar
Experience 4+ yrs
ReactJS React Native Node.js +8 More
Know More
Shivam Chaubey Oodles
Sr. Associate Consultant L1 - Frontend Development
Shivam Chaubey
Experience 4+ yrs
ReactJS HTML, CSS JavaScript +1 More
Know More
Prashant Singh Oodles
Sr. Associate Consultant L1 - Frontend Development
Prashant Singh
Experience 2+ yrs
ReactJS Node.js HTML, CSS +5 More
Know More
Ankit Mishra Oodles
Sr. Associate Consultant L2 - Development
Ankit Mishra
Experience 6+ yrs
ReactJS PHP WordPress +17 More
Know More
Sagar Kumar Oodles
Sr. Associate Consultant L2 - Development
Sagar Kumar
Experience 4+ yrs
ReactJS MEAN Web3.js +13 More
Know More
Richa  Kumari Oodles
Sr. Associate Consultant L2- Frontend Development
Richa Kumari
Experience 4+ yrs
ReactJS Angular Node.js +3 More
Know More

Additional Search Terms

POSAsset Management systemCapacity planningAsset trackingDemand forecastingPerformance metricsTime Trackingvariance reportingWBSTask AnalysisPerformance TrackingVariance TrackingGantt ChartResource TrackingResource AllocationWorkload ManagementDashboard Management Project DashboardsCoding StandardsCode QualityCode ReviewCode AuditCode ReportScope CreepSprint PlanningSprint VelocityLearning Management SystemPatient PortalEMREHRCRMHubspotHuman resource management systemApplicant tracking systemLeave managementPerformance managementTravel Management SystemBooking SystemProperty ManagementProject Management SystemTelemedicineEvent management systemHuman Capital Management ERP ConsultationTicketing SystemDashboard DevelopmentWorkflow AutomationPWASupply Chain ManagementLogistics Management SystemRide HailingE Commerce Drop Shipping ApplicationFleet ManagementOrder ManagementTask ManagementOrdering SystemBooking EngineBooking PlatformReservation SystemHealthcare SaaSWellness appNutrition appFitness app

Related Skills

Skill Blog Posts

Building a Portfolio Tracker Dashboard Using Hyperliquid API
With the rise of decentralized exchange platform development, Hyperliquid is quickly becoming a favorite for real-time perpetual trading. If you're working on a Web3 frontend or a crypto portfolio tracker, integrating live token holdings from Hyperliquid can add serious value to your app.What is Hyperliquid?Hyperliquid is a fast, decentralized exchange built for perpetual contracts. It offers:Instant transaction finalityLow feesDeveloper-friendly APIsAs a trader, you get blazing-fast execution across multiple markets. As a developer, you can build tools like dashboards, bots, or analytics apps with ease.Also, Read | Build a Custom Bonding Curve for Token Sales with SolidityWith Hyperliquid's API, you can:Fetch real-time token balancesBuild portfolio dashboards and chartsCreate wallet-based trading interfacesWhat You'll NeedBefore we dive in, make sure you have:A basic understanding of ReactNode.js and npm (or yarn)A test wallet address on HyperliquidTailwind CSS for stylingYou may also like | Build a Crypto Payment Gateway Using Solana Pay and ReactStep 1: Set Up Your React AppWe'll use Vite for fast setup and development.# 1. Create your Vite + React project npm create vite@latest hyperliquid-dashboard -- --template react # 2. Go into your project folder cd hyperliquid-dashboard # 3. Install dependencies npm install # 4. Start your dev server npm run devStep 2: Install Required PackagesYou'll need some packages for wallet connection and API queries:npm install wagmi viem @tanstack/react-query @rainbow-me/rainbowkit Follow RainbowKit's or Wagmi's quickstart guide to connect a wallet.Step 3: Fetch Portfolio Data from HyperliquidCreate a custom React hook to pull live data from the Hyperliquid testnet API.// useUserPortfolio.js import { useEffect, useState } from "react"; import { useAccount } from "wagmi"; export const useUserPortfolio = () => { const { address } = useAccount(); const [portfolio, setPortfolio] = useState(null); const [loading, setLoading] = useState(false); useEffect(() => { if (!address) return; const fetchData = async () => { setLoading(true); try { const res = await fetch("https://api.hyperliquid-testnet.xyz/info", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ type: "spotClearinghouseState", user: address || "your test address", }), }); const data = await res.json(); setPortfolio(data); } catch (err) { console.error("Error fetching data:", err); } finally { setLoading(false); } }; fetchData(); }, [address]); return { portfolio, loading }; };Also, Discover | Create DeFi Index Fund with Custom ERC-4626 Tokenized VaultsStep 4: Create the Dashboard UIBuild a component that displays key metrics like token balances, account value, and P&L over time. Use libraries like Recharts to create smooth, animated charts.import { useState } from "react"; import { LineChart, Line, XAxis, YAxis, Tooltip, ResponsiveContainer, CartesianGrid, AreaChart, Area } from "recharts"; // Helper: Format timestamp const formatDate = (ts) => { const date = new Date(Number(ts)); return `${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${date.getMinutes()}`; }; const timeOptions = ["day", "week", "month", "allTime"]; const PortfolioDashboard = ({ portfolioData }) => { const [selectedTime, setSelectedTime] = useState("day"); const selectedData = portfolioData?.find(([label]) => label === selectedTime); const { accountValueHistory = [], pnlHistory = [], vlm = "0" } = selectedData?.[1] || {}; // Combine both datasets by timestamp const chartData = accountValueHistory.map(([timestamp, value], i) => ({ time: formatDate(timestamp), accountValue: Number(value), pnl: Number(pnlHistory[i]?.[1] || 0), })); const currentPnl = Number(chartData[chartData.length - 1]?.pnl || 0); const startValue = Number(chartData[0]?.accountValue || 0); const endValue = Number(chartData[chartData.length - 1]?.accountValue || 0); const pnlPercentage = startValue !== 0 ? ((currentPnl / startValue) * 100).toFixed(2) : "0.00"; return ( <div className="w-full text-white space-y-4"> {/* Header Section */} <div className="flex flex-col md:flex-row md:items-center justify-between"> <div> <h2 className="text-3xl font-bold bg-gradient-to-r from-teal-400 to-blue-500 bg-clip-text text-transparent"> Portfolio Overview </h2> <p className="text-gray-400 mt-1">Track your Hyperliquid performance</p> </div> <div className="flex gap-2 mt-4 md:mt-0 bg-gray-800 p-2 rounded-lg"> {timeOptions.map((opt) => ( <button key={opt} onClick={() => setSelectedTime(opt)} className={`px-4 py-2 rounded-md text-sm font-medium transition-all ${selectedTime === opt ? "bg-gray-700 text-white shadow-md" : "text-gray-400 hover:text-white" }`} > {opt.charAt(0).toUpperCase() + opt.slice(1)} </button> ))} </div> </div> {/* Key Stats */} <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 p-6 shadow-lg"> <div className="bg-gray-800/50 p-4 rounded-lg border border-gray-700"> <p className="text-sm text-gray-400 mb-1">Volume</p> <p className="text-2xl font-bold">${Number(vlm).toLocaleString()}</p> </div> <div className="bg-gray-800/50 p-4 rounded-lg border border-gray-700"> <p className="text-sm text-gray-400 mb-1">PNL</p> <div className="flex items-end gap-2"> <p className={`text-2xl font-bold ${currentPnl >= 0 ? 'text-green-400' : 'text-red-400'}`}> ${Math.abs(currentPnl).toFixed(2)} </p> <span className={`text-sm mb-1 ${currentPnl >= 0 ? 'text-green-400' : 'text-red-400'}`}> {currentPnl >= 0 ? '↑' : '↓'} {pnlPercentage}% </span> </div> </div> <div className="bg-gray-800/50 p-4 rounded-lg border border-gray-700"> <p className="text-sm text-gray-400 mb-1">Start Value</p> <p className="text-2xl font-bold">${startValue.toFixed(2)}</p> </div> <div className="bg-gray-800/50 p-4 rounded-lg border border-gray-700"> <p className="text-sm text-gray-400 mb-1">End Value</p> <p className="text-2xl font-bold">${endValue.toFixed(2)}</p> </div> </div> {/* Charts */} <div className="grid md:grid-cols-2 gap-6"> {/* Account Value Chart */} <div className="bg-gradient-to-br from-gray-900 to-gray-800 p-3 rounded-xl border border-gray-700 shadow-lg"> <div className="flex justify-between items-center mb-4"> <h3 className="text-lg font-semibold">Account Value</h3> <div className="text-right"> <p className="text-sm text-gray-400">Current Value</p> <p className="text-xl font-bold text-teal-400">${endValue.toFixed(2)}</p> </div> </div> <ResponsiveContainer width="100%" height={250}> <AreaChart data={chartData}> <defs> <linearGradient id="colorAccountValue" x1="0" y1="0" x2="0" y2="1"> <stop offset="5%" stopColor="#34d399" stopOpacity={0.8} /> <stop offset="95%" stopColor="#34d399" stopOpacity={0} /> </linearGradient> </defs> <XAxis dataKey="time" hide /> <YAxis /> <Tooltip contentStyle={{ backgroundColor: '#1e293b', borderColor: '#334155', borderRadius: '0.5rem' }} /> <CartesianGrid strokeDasharray="3 3" stroke="#334155" /> <Area type="monotone" dataKey="accountValue" stroke="#34d399" fillOpacity={1} fill="url(#colorAccountValue)" /> </AreaChart> </ResponsiveContainer> </div> {/* PNL Chart */} <div className="bg-gradient-to-br from-gray-900 to-gray-800 p-5 rounded-xl border border-gray-700 shadow-lg"> <div className="flex justify-between items-center mb-4"> <h3 className="text-lg font-semibold">Profit & Loss</h3> <div className="text-right"> <p className="text-sm text-gray-400">Current PNL</p> <p className={`text-xl font-bold ${currentPnl >= 0 ? 'text-green-400' : 'text-red-400'}`}> ${currentPnl.toFixed(2)} </p> </div> </div> <ResponsiveContainer width="100%" height={250}> <AreaChart data={chartData}> <defs> <linearGradient id="colorPnl" x1="0" y1="0" x2="0" y2="1"> <stop offset="5%" stopColor={currentPnl >= 0 ? "#4ade80" : "#f87171"} stopOpacity={0.8} /> <stop offset="95%" stopColor={currentPnl >= 0 ? "#4ade80" : "#f87171"} stopOpacity={0} /> </linearGradient> </defs> <XAxis dataKey="time" hide /> <YAxis /> <Tooltip contentStyle={{ backgroundColor: '#1e293b', borderColor: '#334155', borderRadius: '0.5rem' }} /> <CartesianGrid strokeDasharray="3 3" stroke="#334155" /> <Area type="monotone" dataKey="pnl" stroke={currentPnl >= 0 ? "#4ade80" : "#f87171"} fillOpacity={1} fill="url(#colorPnl)" /> </AreaChart> </ResponsiveContainer> </div> </div> </div> ); }; export default PortfolioDashboard;Step 5: Add a Simple NavbarUse the RainbowKit ConnectButton to let users link their wallet.import { ConnectButton } from "@rainbow-me/rainbowkit"; function Navbar() { return ( <div className="navbar"> <h1>📊 Hyperliquid Dashboard</h1> <ConnectButton /> </div> ); }Also, read | Decentralized Prediction Market Development on EthereumStep 6: Set Up ProvidersWrap your app with WagmiProvider, RainbowKitProvider, and React Query so you're ready for wallet interactions and data fetching.import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import "./index.css"; import App from "./App.jsx"; import Providers from "./components/Provider.jsx"; createRoot(document.getElementById("root")).render( <StrictMode> <Providers> <App /> </Providers> </StrictMode> );Step 7: Putting It All TogetherYour main app logic should show different states:Wallet not connectedLoading portfolioDisplay portfolio once data is fetchedimport Navbar from "./components/Navbar"; import PortfolioDashboard from "./components/PortfolioDashboard"; import { useUserPortfolio } from "./hooks/useUserPortfolio"; import { useAccount } from "wagmi"; function App() { const { address, isConnected } = useAccount(); const { portfolio, loading } = useUserPortfolio(address); return ( <div className="min-h-screen w-full bg-black text-white p-5"> <Navbar /> <div className="w-full mx-auto px-10 max-w-[90%] pt-6"> {!isConnected ? ( <p className="text-center text-gray-400"> 🔗 Please connect your wallet to view your portfolio. </p> ) : loading ? ( <p className="text-center">Loading portfolio...</p> ) : ( <PortfolioDashboard portfolioData={portfolio} /> )} </div> </div> ); } export default App;Step 9: Run and TestReplace the test address in your hookStart your app: http://localhost:5173View live token balances from HyperliquidSample UI PreviewConclusionAnd that's it! We have built a working portfolio tracker that fetches real-time wallet data from Hyperliquid. In case you are planning to build your deFi protocol leveraging the potential of Hyperliquid, connect with our skilled blockchain developers to get started.
Technology:Tailwind CSS, EtherJS...more
Category:Blockchain Development & Web3 Solutions
Akash Bhardwaj
07 Jul 2025
Creating a Custom Hyperliquid Dashboard: Track Live Holdings in React
As the demand for decentralized derivatives exchange grows, platforms likeHyperliquid are becoming the go-to for real-time perpetual trading. If you're building a Web3 frontend or crypto portfolio tracker, showinglive token holdings directly from Hyperliquid can dramatically improve your user experience.In this guide, we'll walk you through building acustom Hyperliquid trading dashboard in React. You'll learn how to fetch and display a user's real-time balances using a clean component-based architecture.What is Hyperliquid?Hyperliquid is a high-performance, decentralized perpetual exchange offering instant finality, low fees, and composable APIs. As a trader, you can access dozens of markets with lightning-fast performance. As a developer, you can use their APIs to build dashboards, bots, and analytics tools.By integrating Hyperliquid data, you can:Fetch real-time token balances from any Hyperliquid addressBuild portfolio dashboards and analytics chartsProvide wallet-based trading interfacesAlso, Check | How to Fetch Token Pricing with On-Chain Bonding CurvesPrerequisitesBefore you start building the dashboard, ensure you have the following ready:A basic understanding of React.jsNode.js and npm/yarn installedA Hyperliquid wallet address for testingTailwind CSS or your preferred styling library (optional)Step 1: Set up Your React AppFirst, let's set up your React app if you haven't done so already:We'll useVite for lightning-fast development:# 1. Create your Vite + React project npm create vite@latest hyperliquid-dashboard -- --template react # 2. Navigate into the project folder cd hyperliquid-dashboard # 3. Install dependencies npm install # 4. Start the dev server npm run devNow, install any required packages:npm install wagmi viem @tanstack/react-query @rainbow-me/rainbowkitNOTE:Now, you'll need to set up a wallet connection usingwagmi. You can follow theWagmi Quick Start Guide for configuring your wallet connection.Also, Explore | Build a Crypto Payment Gateway Using Solana Pay and ReactStep 2: Fetch Holdings DataLet's start with the custom hook to get holdings from the Hyperliquid testnet API.// components/useHyperLiquidHoldings.jsx import { useEffect, useState } from "react"; import { useAccount } from "wagmi"; export const useHyperliquidHoldings = () => { const [holdings, setHoldings] = useState(null); const [loading, setLoading] = useState(false); const { address } = useAccount(); useEffect(() => { if (!address) { setHoldings(null); setLoading(false); return; } const fetchHoldings = async () => { setLoading(true); try { const response = await fetch("https://api.hyperliquid-testnet.xyz/info", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ type: "spotClearinghouseState", user: address, //for testing use can use the any address like zero address 0x0000000000000000000000000000000000000000 }), }); const data = await response.json(); setHoldings(data); } catch (error) { console.error("Error fetching holdings:", error); } finally { setLoading(false); } }; fetchHoldings(); }, [address]); return { holdings, loading }; };Step 3: Create the Holdings TableNext, build a responsive table UI to display the balances.// components/HoldingTable.jsx export default function HoldingsTable({ balances }) { return ( <div className="table-container"> <h2 className="table-title">Your Token Balances</h2> <div className="table-wrapper"> <table className="responsive-table"> <thead> <tr> <th>Coin</th> <th>Token ID</th> <th>Hold</th> <th>Total</th> <th>Entry Notional</th> </tr> </thead> <tbody> {!balances || balances.length === 0 ? ( <tr> <td colSpan="5" className="no-data"> No balances available. </td> </tr> ) : ( balances.map((item, i) => ( <tr key={i}> <td>{item.coin}</td> <td>{item.token}</td> <td>{item.hold}</td> <td>{item.total}</td> <td>{item.entryNtl}</td> </tr> )) )} </tbody> </table> </div> </div> ); }Also, Discover | Create DeFi Index Fund with Custom ERC-4626 Tokenized VaultsStep 4: Build the NavbarAdd a simple navbar component for reusable top navigation.// components/Navbar.jsx import { ConnectButton } from "@rainbow-me/rainbowkit"; import React from "react"; function Navbar() { return ( <div className="navbar"> <h1 className="logo">HYPER LIQUID</h1> <ConnectButton /> </div> ); } export default Navbar;Step 5: Set up ProvidersIf you're planning to expand later (like wallet integration), create a Providers wrapper.// components/Provider.jsx import { WagmiProvider } from "wagmi"; import { RainbowKitProvider, darkTheme, getDefaultConfig, } from "@rainbow-me/rainbowkit"; import "@rainbow-me/rainbowkit/styles.css"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; const hyperLiquidChain = { id: 998, name: "Hyper Liquid", nativeCurrency: { name: "Hyper Liquid", symbol: "HYPE", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.hyperliquid-testnet.xyz/evm"] }, }, }; const config = getDefaultConfig({ chains: [hyperLiquidChain], projectId: "3c81036dac8bb5451ee3e10fd92ea0e0", }); const queryClient = new QueryClient(); function Providers({ children }) { return ( <WagmiProvider config={config}> <QueryClientProvider client={queryClient}> <RainbowKitProvider theme={darkTheme({ overlayBlur: "small", borderRadius: "medium", })} modalSize="compact" > {children} </RainbowKitProvider> </QueryClientProvider> </WagmiProvider> ); } export default Providers;Also, Check | Decentralized Prediction Market Development on EthereumStep 6: Compose the AppHere's how your main app logic comes together:// App.jsx import HoldingsTable from "./components/HoldingTable"; import Navbar from "./components/Navbar"; import { useHyperliquidHoldings } from "./components/useHyperLiquidHoldings"; function App() { const { holdings } = useHyperliquidHoldings(); return ( <div> <Navbar /> <div className="holding-section"> <HoldingsTable balances={holdings?.balances} /> </div> </div> ); } export default App;And entry point:// main.jsx import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import "./index.css"; import App from "./App.jsx"; import Providers from "./components/Provider.jsx"; createRoot(document.getElementById("root")).render( <StrictMode> <Providers> <App /> </Providers> </StrictMode> );Step 7: Add a simple index.css file* { margin: 0; padding: 0; box-sizing: border-box; font-family: sans-serif; } .navbar { width: 100%; padding: 10px 20px; border: 1px solid black; display: flex; align-items: center; justify-content: space-between; } .holding-section { padding: 50px; } .table-container { padding: 1rem; background-color: #1a1a1a; color: #fff; border-radius: 8px; margin-top: 20px; max-width: 100%; overflow-x: auto; } .table-title { font-size: 1.5rem; font-weight: 600; margin-bottom: 1rem; text-align: center; } .table-wrapper { overflow-x: auto; } .responsive-table { width: 100%; border-collapse: collapse; min-width: 600px; } .responsive-table th, .responsive-table td { padding: 12px 16px; text-align: left; border-bottom: 1px solid #333; } .responsive-table th { background-color: #2a2a2a; font-weight: 600; } .responsive-table tr:hover { background-color: #333; } .no-data { text-align: center; color: #ccc; padding: 1rem; }Step 8: Run and TestMake sure to:Replace the test wallet address inuseHyperLiquidHoldings.jsxStyle your components inindex.css or using TailwindOpen your app onhttp://localhost:5173 and view live balancesConclusionYou've just built a functional Hyperliquid dashboard that fetches and displays live wallet holdings. With this foundation, you can extend your app to support:Wallet connection via MetaMaskReal-time trade executionPnL trackingHistorical analyticsThis kind of integration gives you powerful insights into decentralized trading activities and is a stepping stone toward building full-featured Web3 trading interfaces.OutputIf you are planning to build a deFi protocol or deFi exchange like Hyperliquid, connect with our skilled blockchain developers to get started.
Technology:Tailwind CSS, Node.js...more
Category:Blockchain Development & Web3 Solutions
Rohit Kumar Gola
07 Jul 2025
How to Place a Limit Order on Ethereum using Kyberswap
In this guide, we will walk through the process of placing a limit order on Kyberswap using their API. Kyberswap is a decentralized exchange (DEX) aggregator that provides the best token prices by aggregating liquidity from various DEXs. By leveraging Kyberswap's API, we can automate the process of placing limit orders for token trades, giving you full control over your trade price. This tutorial will guide you through setting up the necessary environment, writing the code to interact with the Kyberswap API, and successfully placing a limit order using Node.js and the appropriate dependencies. For more about DEX, visit crypto exchange development services.What is a limit order?A limit order is an instruction to buy or sell your token at a specific price or better. It gives control over the trade price to be executed.For example:A buy limit order will only execute at the limit price. And a sell limit order will only execute at the limit price or higher.Also Read | Ethereum Smart Contracts: Best Use CasesWhat is Kyberswap?A dex aggregator & liquidity protocol that provides the best token price by aggregating liquidity from various DEXs. It also provides liquidity providers with opportunities to earn rewards by depositing their tokens.Before everything, you must have Node.js and VS Code installed.Let's set up this:Open your terminal and type this command: 1. mkdir KyberswapApi 2. cd KyberswapApi 3. code .It will open your project KyberswapApi in VS Code, then open the terminal in VS Code and type this command: npm init It will initialize a project and create the package.json file. npm install viem ethers axios It will install all dependencies in your package.json file.Create a file index.js and paste this ProgramRun this command in your terminal : node index.js (this will create the limit order successfully).Also, Read | A Dev Guide to Placing Orders using Hyperliquid APIHow to use Kyberswap Api to place a limit orderTo create a new order, we need to make a post request on this URL: https://limit-order.kyberswap.com/write/api/v1/ordersFor this, we need params which include the signed EIP712 message and returned data from this post request(https://limit-order.kyberswap.com/write/api/v1/orders/sign-message).Program : import { createWalletClient, erc20Abi, parseEther, getContract, createPublicClient, http, encodeFunctionData } from "viem"; import { ethers } from "ethers"; import axios from "axios"; import { privateKeyToAccount } from 'viem/accounts'; import { base } from 'viem/chains'; const kyberApiUrl = "https://limit-order.kyberswap.com"; const privateKey = "000000X4PRivateKey"; const rpcUrl = "https://mainnet.base.org"; async function mainApprove(makerAsset, limitOrderContract, maker, makingAmount) { const client = createPublicClient({ chain: { id: 8453, // Base chain ID name: "Base", rpcUrls: { default: { http: ["https://mainnet.base.org"] }, }, }, transport: http("https://mainnet.base.org") }); console.log("Client created for Base chain:", client); const tokenContract = getContract({ abi: erc20Abi, address: makerAsset, client: client, }); console.log("here is the tokenContract",tokenContract.address); const currentAllowance = await tokenContract.read.allowance([ maker, limitOrderContract, ]); console.log("Current Allowance:", currentAllowance.toString()); const encodedCalls = []; if (BigInt(currentAllowance) < BigInt('100000000')) { console.log("here it comes "); const approvalData =await getTokenApprovalCalldata( makerAsset, limitOrderContract, makingAmount, ); console.log(' Approval Data:', approvalData); encodedCalls.push({ to: makerAsset , data: approvalData, // gas: '0.007547422' //approvalGas.toString(), }); console.log("Encoded Calls:", encodedCalls); const swaptx = encodedCalls; const str = "000000X4PRivateKey"; const account = privateKeyToAccount(`0x${str}`); const walletClient = createWalletClient({ account, chain: base, transport: http('https://mainnet.base.org'), }); console.log("Wallet Client created:"); const tx1=[]; for (const call of swaptx) { const tx = { to: call.to, data: call.data, value: call.value ? BigInt(call.value) : 0n, }; const hash = await walletClient.sendTransaction(tx); tx1.push(hash); console.log(' Transaction sent, hash:', hash); } return tx1; } return ""; } async function postCreateOrderUnsigned( chainId, makerAsset, takerAsset, maker, //Maker address makingAmount, // "10000" takingAmount // "20000000000000000" ) { let targetPath = `/write/api/v1/orders/sign-message`; // Structure the request to be sent in POST body const requestBody = { chainId: chainId.toString(), makerAsset: makerAsset, // USDC takerAsset: takerAsset, // KNC maker: maker, allowedSenders: [maker], // Included so that only our account can fill this order makingAmount: makingAmount, takingAmount: takingAmount, expiredAt: Math.floor(Date.now() / 1000) + 60 * 60, // 60mins }; console.debug(requestBody); try { const { data } = await axios.post(kyberApiUrl + targetPath, requestBody); // Return the request used and the EIP712 unsigned data console.log("the data we have",data); return { routerContract: data.data.domain.verifyingContract, requestBody: requestBody, returnedData: data.data, }; } catch (error) { throw error; } } //Get Maker Active Making Amount async function getMakerActiveAmount(chainId, makerAsset, makerAddress) { const targetPath = `/read-ks/api/v1/orders/active-making-amount`; const targetPathConfig = { params: { chainId: chainId, makerAsset: makerAsset, maker: makerAddress, }, }; try { const { data } = await axios.get( kyberApiUrl + targetPath, targetPathConfig ); return data.data.activeMakingAmount; } catch (error) { throw error; } } async function getContracts(chainId) { const targetPath = `/read-ks/api/v1/configs/contract-address`; // Specify the chainId to query const targetPathConfig = { params: { chainId: chainId.toString(), }, }; try { console.log(`\nGetting the LO contracts...`); const { data } = await axios.get( kyberApiUrl + targetPath, targetPathConfig ); return data.data; } catch (error) { throw error; } } // Request approval with calldata sending to the user server (client-side) async function getTokenApprovalCalldata( tokenContractAddress, spenderAddress, amount ) { const data = encodeFunctionData({ abi: erc20Abi, functionName: "approve", args: [spenderAddress, parseEther(amount.toString())], }); //TODO: Send the calldata to the user server here return data; } async function signOrderData(domain, types, message) { const provider = new ethers.JsonRpcProvider(rpcUrl); const signer = new ethers.Wallet(privateKey, provider); return await signer.signTypedData(domain, types, message); } // Create New Order on Kyberswap async function postCreateOrder( chainId, makerAsset, takerAsset, maker, makingAmount, takingAmount ) { const targetPath = `/write/api/v1/orders`; const unsignedOrder = await postCreateOrderUnsigned( chainId, makerAsset, takerAsset, maker, makingAmount, takingAmount ); // Get the request body and the EIP712 order creation data const unsignedOrderReqBody = unsignedOrder.requestBody; const unsignedOrderReturnData = unsignedOrder.returnedData; const routerContract = unsignedOrder.routerContract; // Get the Maker current making amount to ensure contract has sufficient allowance across all orders const currentMakingAmount = await getMakerActiveAmount( chainId, makerAsset, maker ); const newMakingAmount = Number(currentMakingAmount) + Number(unsignedOrderReqBody.makingAmount); // Get the LO contract address to interact with on-chain const limitOrderContract = (await getContracts(chainId)).latest; // Check if LO contract has sufficient allowance to spend makerAsset await getTokenApprovalCalldata( makerAsset, limitOrderContract, newMakingAmount ); const swaptx= await mainApprove( makerAsset, limitOrderContract, maker, newMakingAmount ) console.log("the swaptx is: ",swaptx); // Sign the EIP712 order creation with the user server (client-side) const signature = await signOrderData( unsignedOrderReturnData.domain, { Order: unsignedOrderReturnData.types.Order }, unsignedOrderReturnData.message ); // Structure the request to be sent in POST body const requestBody = { ...unsignedOrderReqBody, salt: unsignedOrderReturnData.message.salt, signature: signature, }; console.log("the request body is: ", requestBody); try { console.log(`\nPosting the create order...`); const { data } = await axios.post(kyberApiUrl + targetPath, requestBody); console.log(`KyberSwap server response:`); console.log(data); } catch (error) { throw error; } }Call the post createOrder function with its parameters, and your order will be created.For example : postCreateOrder( "8453", // chainId "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb", // maker asset "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", // taker asset "0x1AC9b76006BaF4f06563E491d4182C82792D2A2C", // maker address "5000000", // making amount "5000000" // taking amount );You may also like | Building a Portfolio Tracker Dashboard Using Hyperliquid APIConclusion:In conclusion, this guide demonstrates how to place a limit order on Kyberswap using the API, allowing you to efficiently manage trades with full control over your order price. By following the steps to set up your environment, configure your wallet, and interact with the Kyberswap API, you can easily integrate limit orders into your trading strategies. With the right parameters and authentication, you can securely create orders on Kyberswap and take advantage of the liquidity available. This process enables developers to enhance their algorithmic trading systems and automate transactions effectively on the platform. For more information, refer to the Kyberswap API documentation.In case you are planning to build a DEX aggregator like Kyberswap, connect with our skilled blockchain developers to get started.
Technology:ReactJS, Node.js...more
Category:Blockchain Development & Web3 Solutions
Krishan Chand
06 Jul 2025

© Copyright 2009-2026 Oodles Technologies. All Rights Reserved.