2:I[91610,["579","static/chunks/app/docs/getting-started/page-bb3d5e79414c7e1d.js"],"CodeBlock"] 3:I[75001,[],""] 4:I[9596,[],""] 5:I[83453,["575","static/chunks/575-5a246ccadcf411fa.js","418","static/chunks/418-f3b6d2f154485d8f.js","998","static/chunks/app/docs/layout-c4230139aed5d08b.js"],"default",1] 6:I[5520,["575","static/chunks/575-5a246ccadcf411fa.js","913","static/chunks/913-95a4bf8751887fd7.js","319","static/chunks/319-a605e396582267ab.js","114","static/chunks/114-54f34015d309a9f8.js","654","static/chunks/654-8e46d05deaba89c2.js","395","static/chunks/395-2e55d845c3f0b2f3.js","185","static/chunks/app/layout-0fe9fc7be6bfdac9.js"],"Providers"] 0:["oSNFCr-VaZMgs1L9AoMiI",[[["",{"children":["docs",{"children":["getting-started",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",{"children":["docs",{"children":["getting-started",{"children":["__PAGE__",{},[["$L1",[["$","h1",null,{"className":"mb-3 font-display text-3xl font-bold tracking-tight text-cream","children":"Getting Started"}],["$","p",null,{"className":"mb-8 text-base leading-relaxed text-muted","children":"From cloning the repository to running a full local demo workspace (web app, keeper, and smart contracts) in under five minutes. No live API keys are required in mock mode."}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"Repository Structure"}],["$","p",null,{"className":"mb-4 text-sm leading-relaxed text-muted","children":"Longbow is set up as a monorepo using pnpm workspaces:"}],["$","$L2",null,{"code":"longbow/\n apps/\n web/ # Next.js web application (landing, app, docs, APIs)\n packages/\n contracts/ # Solidity smart contracts, scripts, and Foundry tests\n keeper/ # Node.js keeper bot for filling active orders\n shared/ # Core token registries, ABI types, and shared src\n package.json # pnpm root workspace config\n pnpm-workspace.yaml # Workspace package mapping","language":"text","title":"Monorepo layout"}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"Prerequisites"}],["$","ul",null,{"className":"mb-4 list-disc space-y-1.5 pl-5 text-sm leading-relaxed text-muted marker:text-neon","children":[["$","li",null,{"children":"Node.js >= 18.17 and pnpm >= 9"}],["$","li",null,{"children":"Foundry (forge) - only needed for compiling or testing smart contracts"}],["$","li",null,{"children":"An injected browser wallet (MetaMask or Rabby) - only required for live blockchain mode"}]]}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"1 · Install & Run"}],["$","p",null,{"className":"mb-4 text-sm leading-relaxed text-muted","children":"Clone the fork, install dependencies, and launch both the web application and the keeper node:"}],["$","$L2",null,{"language":"bash","title":"terminal","code":"git clone https://github.com/longbowtrade/longbow.git && cd longbow\npnpm install\n\n# 1 - Run the Next.js web app (Landing + Terminal App + APIs + Docs)\npnpm --filter web dev # Starts on http://localhost:3000 (fallback to 3001)\n\n# 2 - Run the Keeper Node (watches and executes active orders)\npnpm --filter keeper start # Polls database/API every 15s"}],["$","p",null,{"className":"mb-4 text-sm leading-relaxed text-muted","children":["Mock mode is enabled by default (",["$","code",null,{"className":"rounded bg-white/10 px-1.5 py-0.5 text-[13px] text-cream","children":"NEXT_PUBLIC_USE_MOCKS=true"}],"). Prices, reserves, user holdings, and execution logs are simulated deterministically inside the browser/API, meaning the entire placement, polling, and execution loop works completely offline without network requirements."]}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"2 · Environment Settings"}],["$","$L2",null,{"language":"bash","title":".env","code":"cp .env.example .env\n# then set what you need:\nNEXT_PUBLIC_CHAIN_ID=46630 # 4663 for mainnet, 46630 for testnet\nNEXT_PUBLIC_USE_MOCKS=true # Set to false to disable mock simulation and read from L2\nFINNHUB_API_KEY= # Key for off-chain stock quotes (finnhub.io, free tier)\nALPHAVANTAGE_API_KEY= # Fallback stock quote key\nEXECUTOR_ADDRESS= # Contract address of your deployed LongbowExecutor\nKEEPER_PRIVATE_KEY= # Funded keeper wallet private key (required for live L2 executions)"}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"3 · Compiling & Testing Contracts"}],["$","p",null,{"className":"mb-4 text-sm leading-relaxed text-muted","children":["Solidity contracts live inside the ",["$","code",null,{"className":"rounded bg-white/10 px-1.5 py-0.5 text-[13px] text-cream","children":"packages/contracts"}]," folder. Compile and run unit tests using Foundry:"]}],["$","$L2",null,{"language":"bash","title":"terminal","code":"cd packages/contracts\nforge build # Compile executor contracts and generate ABI\nforge test -vv # Run contract test suites (triggers, DCA logic, slippage guards)"}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"4 · Deploying Contracts"}],["$","$L2",null,{"language":"bash","title":"terminal","code":"# Deploy the demo environment (mock pools + seed tokens) to Robinhood Testnet\nforge script script/SeedDemo.s.sol \\\\\n --rpc-url robinhood_testnet --broadcast --private-key $DEPLOYER_KEY\n\n# Deploy the production executor against mainnet Uniswap V2 Router\nROUTER=0x89e5db8b5aa49aa85ac63f691524311aeb649eba \\\\\nforge script script/Deploy.s.sol \\\\\n --rpc-url robinhood_mainnet --broadcast --private-key $DEPLOYER_KEY"}],["$","div",null,{"className":"mb-5 rounded-xl border p-4 text-sm leading-relaxed border-gold/40 bg-gold/10 text-gold","children":["Verify that you are using the correct network credentials. The testnet RPC and faucet can be found on faucet.testnet.chain.robinhood.com. Testnet chain ID is ",["$","code",null,{"className":"rounded bg-white/10 px-1.5 py-0.5 text-[13px] text-cream","children":"46630"}],"."]}],["$","h2",null,{"className":"mb-3 mt-10 font-display text-xl font-semibold text-cream","children":"Setup Troubleshooting"}],["$","ul",null,{"className":"mb-4 list-disc space-y-1.5 pl-5 text-sm leading-relaxed text-muted marker:text-neon","children":[["$","li",null,{"children":[["$","strong",null,{"className":"text-cream","children":"Port Conflicts"}]," — If port 3000 is in use, Next.js dev server will automatically start on ",["$","code",null,{"className":"rounded bg-white/10 px-1.5 py-0.5 text-[13px] text-cream","children":"http://localhost:3001"}],". The app will adjust itself, but make sure to check terminal logs."]}],["$","li",null,{"children":[["$","strong",null,{"className":"text-cream","children":"Keeper fails to execute"}]," — Verify that you have funded the keeper's private key address with native L2 ETH to pay for transaction gas, and that ",["$","code",null,{"className":"rounded bg-white/10 px-1.5 py-0.5 text-[13px] text-cream","children":"USE_MOCKS=false"}]," is set on the keeper terminal if you're trying to execute real swaps."]}]]}]],null],null],null]},[null,["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","docs","children","getting-started","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[null,["$","$L5",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","docs","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}],"params":{}}]],null],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/f55723d0ee21179d.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","className":"__variable_f367f3 __variable_dd5b2f","children":["$","body",null,{"className":"font-sans","children":["$","$L6",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]}]}]],null],null],["$L7",null]]]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Longbow Docs - Getting Started"}],["$","meta","3",{"name":"description","content":"Wall Street closes, the chain doesn't. Longbow tracks the gap between on-chain stock prices and real quotes on Robinhood Chain — non-custodial limit orders & DCA, keeper-executed through Uniswap V2. Nock. Draw. Loose."}],["$","meta","4",{"property":"og:title","content":"Longbow — Wall Street closes. The chain doesn't."}],["$","meta","5",{"property":"og:description","content":"The gap terminal for tokenized stocks: on-chain price vs real quote, live — with non-custodial limit & DCA orders keepers execute through Uniswap V2."}],["$","meta","6",{"property":"og:image","content":"https://longbowtrade.xyz/brand/og.png"}],["$","meta","7",{"property":"og:image:width","content":"1200"}],["$","meta","8",{"property":"og:image:height","content":"630"}],["$","meta","9",{"property":"og:image:alt","content":"Longbow"}],["$","meta","10",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","11",{"name":"twitter:site","content":"@longbowtrade"}],["$","meta","12",{"name":"twitter:title","content":"Longbow — Wall Street closes. The chain doesn't."}],["$","meta","13",{"name":"twitter:description","content":"The gap terminal for tokenized stocks: on-chain price vs real quote, live — with non-custodial limit & DCA orders keepers execute through Uniswap V2."}],["$","meta","14",{"name":"twitter:image","content":"https://longbowtrade.xyz/brand/og.png"}],["$","link","15",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"48x48"}],["$","link","16",{"rel":"icon","href":"/brand/favicon.svg","type":"image/svg+xml"}],["$","link","17",{"rel":"icon","href":"/brand/favicon-32.png","sizes":"32x32","type":"image/png"}],["$","link","18",{"rel":"icon","href":"/brand/icon-192.png","sizes":"192x192","type":"image/png"}],["$","link","19",{"rel":"apple-touch-icon","href":"/brand/apple-touch-icon.png"}]] 1:null