# Forkline
Self-custody trading terminal for tokenized stocks on Robinhood Chain. Live at forkline.xyz
Forkline lets you trade tokenized equities — NVDA-T, AAPL-T, TSLA-T, and more — on-chain via Robinhood Chain (chainId 4663). Every trade is dispatched to your own GitHub Actions executor. Your private key never touches Forkline servers.
Browser → forkline.xyz API → workflow_dispatch → your-fork/forkline-executor
↓
RialtoSettlementRouter (on-chain)
↓
Settled in USDG
- You place a trade on forkline.xyz
- Forkline API creates a trade record and dispatches
workflow_dispatchto your executor repo - GitHub Actions reads your
PRIVATE_KEYfrom your own GitHub Secrets - The executor signs and submits the swap to
RialtoSettlementRouteron-chain - Trade result (tx hash, status) is reported back to Forkline
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite, Wouter, TanStack Query |
| API | Express 5, PostgreSQL, Drizzle ORM |
| Auth | GitHub OAuth + EVM wallet (SIWE) |
| AI | Claude Opus 4 — Pulse market insights (server-side, every 4h) |
| Chain | Robinhood Chain (chainId 4663), USDG stablecoin |
| Validation | Zod v4, drizzle-zod |
| Codegen | Orval (OpenAPI → React Query + Zod) |
forkline/
├── artifacts/
│ ├── forkline/ # React SPA (trading terminal frontend)
│ └── api-server/ # Express 5 API server
├── lib/
│ ├── db/ # Drizzle ORM schema + migrations
│ ├── api-spec/ # OpenAPI specification (source of truth)
│ ├── api-zod/ # Generated Zod validators
│ └── api-client-react/ # Generated TanStack Query hooks
└── github-actions-template/ # Executor template (users fork this)
- Node.js ≥ 24
- pnpm ≥ 9
- PostgreSQL database
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
GITHUB_CLIENT_ID |
GitHub OAuth App client ID |
GITHUB_CLIENT_SECRET |
GitHub OAuth App client secret |
SESSION_SECRET |
Express session secret (min 32 chars, random) |
ANTHROPIC_API_KEY |
Anthropic API key (Pulse AI — Claude Opus 4) |
FORKLINE_BOT_SECRET |
HMAC key for executor trade callbacks |
pnpm install
# Push DB schema
pnpm --filter @workspace/db run push
# Start API server (port 8080)
pnpm --filter @workspace/api-server run dev
# Start frontend (port auto-assigned)
pnpm --filter @workspace/forkline run dev# Full typecheck
pnpm run typecheck
# Regenerate API hooks from OpenAPI spec
pnpm --filter @workspace/api-spec run codegen
# Production build
pnpm run buildAll contracts verified on Blockscout.
| Contract | Address |
|---|---|
| RialtoSettlementRouter | 0xE23747d8c04b2101c873282C3d339D65d3d84ef0 |
| RialtoV4StockSwapExecutor | 0x36E90e3aCaddC1aad147dBF7a965F0290103717A |
| USDG (Global Dollar) | 0x2CE3E396E069Ac9FA62046F423267072E06E77af |
| Uniswap V3 SwapRouter (fallback) | 0xE592427A0AEce92De3Edee1F18E0157C05861564 |
| Ticker | Name | Contract |
|---|---|---|
| AAPL-T | Apple | 0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9 |
| AMD-T | AMD | 0x86923f96303D656E4aa86D9d42D1e57ad2023fdC |
| AMZN-T | Amazon | 0x12f190a9F9d7D37a250758b26824B97CE941bF54 |
| COIN-T | Coinbase | 0x6330D8C3178a418788dF01a47479c0ce7CCF450b |
| GOOGL-T | Alphabet | 0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3 |
| META-T | Meta | 0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35 |
| MSFT-T | Microsoft | 0xe93237C50D904957Cf27E7B1133b510C669c2e74 |
| NFLX-T | Netflix | 0xE0444EF8BF4eD74f74FD73686e2ddF4C1c5591E8 |
| NVDA-T | NVIDIA | 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC |
| TSLA-T | Tesla | 0x322F0929c4625eD5bAd873c95208D54E1c003b2d |
All tokens are ERC-20 with 18 decimals. USDG uses 6 decimals.
The user-facing executor template lives at forkline-git/forkline-executor. Users fork it, add GitHub Secrets, and connect it from their Forkline portfolio page. Trade execution happens entirely within the user's own GitHub Actions environment.
MIT — see LICENSE.