TradeClaw

Open-source AI market intelligence for traders who prefer evidence over noise.

Self-hosted by default

Product

  • Dashboard
  • Screener
  • Backtest
  • Track record
  • Live demo

Transparency

  • What we tested and killed
  • Methodology
  • Why long-term
  • Open data
  • Calibration

Resources

  • Blog
  • Docs
  • API reference
  • How it works
  • FAQ
  • Glossary

Community

  • Discord
  • Weekly digest
  • Contribute
  • Contributors
  • Sponsors

Open source

  • GitHub repo
  • Star history
  • Self-host guide
  • Security
  • Data freshness
  • Roadmap

© 2026 TradeClaw. MIT licensed.

Terms|Privacy|Trading involves risk. Signals are informational only and are not financial advice.
DashboardScreenerCopilotTrack Record
TradeClaw
Documentation

Getting Started

  • Overview
  • Installation
  • Configuration
  • Self-Hosting

Core Features

  • Trading Signals
  • Paper Trading
  • Strategy Builder

Integrations

  • API Reference
  • Webhooks
  • Telegram Bot
  • Plugins
  • Embedding

Project

  • Contributing
  • Changelog
GitHubApp Dashboard

Project

Contributing

TradeClaw is open source and welcomes contributions. Whether you are adding an indicator, improving the UI, or fixing a bug — this page covers everything you need to get from zero to a merged pull request.

Monorepo Architecture

TradeClaw uses a standard npm workspaces monorepo. The main application lives in apps/web. Shared packages (types, utilities) live under packages/.

Repository structure
tradeclaw/
├── apps/
│   └── web/                  # Next.js application (main app)
│       ├── app/              # App Router pages and API routes
│       │   ├── api/          # REST API handlers
│       │   ├── dashboard/    # Dashboard UI
│       │   ├── docs/         # This documentation site
│       │   └── lib/          # TA engine, stores, utilities
│       ├── components/       # Reusable React components
│       └── public/           # Static assets
├── packages/
│   └── types/                # Shared TypeScript types
├── docker-compose.yml        # Production compose file
├── docker-compose.dev.yml    # Dev compose with hot reload
└── STATE.yaml                # Project state tracker

Dev Setup

1

Fork and clone

git clone https://github.com/your-fork/tradeclaw && cd tradeclaw
2

Install dependencies

npm install
3

Copy env template

cp apps/web/.env.example apps/web/.env.local
4

Start dev server

npm run dev --workspace=apps/web

The dev server starts at http://localhost:3000 with hot reload. No database setup is required — TradeClaw uses JSON file storage by default.

Tech Stack

Next.js 14

Framework

App Router, Server Components, Route Handlers

TypeScript

Language

Strict mode, no implicit any

Tailwind CSS v4

Styling

Utility classes, no CSS modules

File-based storage

Data

JSON files in /data — no database required

Server-Sent Events

Live push

Live price stream via /api/prices/stream

Node.js crypto

Security

HMAC-SHA256 for webhook signing

Key Directories

PathPurpose
apps/web/app/api/All REST API route handlers (Next.js Route Handlers)
apps/web/app/lib/ta-engine.tsTechnical analysis — RSI, MACD, EMA, BB, Stochastic
apps/web/app/lib/signal-store.tsFile-based signal persistence and query layer
apps/web/app/lib/hooks/React hooks (use-price-stream, use-signals, etc.)
apps/web/components/Shared React components (charts, cards, modals)
apps/web/app/docs/This documentation site — App Router pages
apps/web/public/sw.jsService Worker for PWA offline support

Code Style

›

TypeScript strict mode

All files must pass tsc --noEmit. No implicit any, no unused vars.

›

Server Components by default

Only add "use client" when you need browser APIs or React state.

›

No external state libraries

Use React state, context, and URL params. No Redux or Zustand.

›

Tailwind over inline styles

Use utility classes. Avoid style={{}} except for truly dynamic values.

›

File-based storage API

All data access goes through the store modules in app/lib/. No direct fs calls in routes.

Adding a New Indicator

1. Add to apps/web/app/lib/ta-engine.ts
// Export the result type
export interface MyIndicatorResult {
  value: number;
  signal: 'BUY' | 'SELL' | 'NEUTRAL';
}

// Export the calculation function
export function calcMyIndicator(closes: number[], period = 14): MyIndicatorResult {
  // … your implementation
  return { value, signal };
}

// 2. Import and call it in generateSignal()
// 3. Include its vote in the confluence score calculation

Pull Request Process

1

Open an issue first

Describe what you want to build or fix. We will confirm the approach before you invest time writing code.

2

Branch from main

Use the pattern feat/description or fix/description. Keep branches focused — one feature or fix per PR.

3

Run the build

npm run build must pass clean with zero TypeScript errors before opening a PR.

4

Write a clear description

Summarize what changed and why. Include screenshots for UI changes. Link to the related issue.

5

Update docs if needed

New endpoints go in /docs/api. New indicators go in /docs/signals. New env vars go in /docs/configuration.

PreviousEmbeddingNextChangelog
Edit this page on GitHub