From c1b660bb45bccf5e18ce4b9de67b80adc3e65c7d Mon Sep 17 00:00:00 2001 From: tinkle-community Date: Tue, 7 Jul 2026 20:22:59 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20beginner-first=20funnel=20=E2=80=94=20p?= =?UTF-8?q?lain-language=20guidance=20from=20landing=20to=20first=20trade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A newcomer who can't get from install to a running trade in minutes churns. This pass removes every jargon wall on that path: - Landing hero: primary CTA is now 'START THE AUTOPILOT' (routes into the guided flow; logged-out users get the guest walkthrough) with a plain-language promise line — self-hosted, ~$13 to start, no API keys. 'CREATE STOCK TRADER' demoted to a 'SEE IT WORK' scroll button. - Deploy section: 'high-frequency trading node / sandboxed execution env' copy replaced with plain words plus the first-five-minutes checklist (register → fund $1 + $12 → press start). - Config page: the guided launch panel now renders FIRST for anyone without a running autopilot; the config grid becomes detail below. Steps renamed to 'Step 1 · Fund the AI wallet ($1+)' etc., each explained in one plain sentence with explicit dollar amounts and safety notes ('it can never withdraw your money'). - Every AI-wallet action (deposit, create, preflight fix-links) now lands on the /welcome page with the QR code and auto-refreshing balance instead of the key-config modal. - README: first-run three-step guide under the install command (banner asset included); six dead landing components removed. Tests: 128 web tests green; funnel click-verified logged-out and logged-in. --- README.md | 323 ++++++++---------- docs/assets/nofx-banner.svg | 44 +++ web/src/components/landing/AboutSection.tsx | 157 --------- .../components/landing/AnimatedSection.tsx | 29 -- .../components/landing/CommunitySection.tsx | 158 --------- .../components/landing/FeaturesSection.tsx | 203 ----------- web/src/components/landing/HeroSection.tsx | 259 -------------- .../components/landing/HowItWorksSection.tsx | 167 --------- .../components/landing/core/DeploymentHub.tsx | 27 +- .../components/landing/core/TerminalHero.tsx | 18 +- web/src/components/trader/AITradersPage.tsx | 37 +- .../trader/AutopilotLaunchPanel.tsx | 48 ++- 12 files changed, 271 insertions(+), 1199 deletions(-) create mode 100644 docs/assets/nofx-banner.svg delete mode 100644 web/src/components/landing/AboutSection.tsx delete mode 100644 web/src/components/landing/AnimatedSection.tsx delete mode 100644 web/src/components/landing/CommunitySection.tsx delete mode 100644 web/src/components/landing/FeaturesSection.tsx delete mode 100644 web/src/components/landing/HeroSection.tsx delete mode 100644 web/src/components/landing/HowItWorksSection.tsx diff --git a/README.md b/README.md index 7ad19a1e..4d692407 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,14 @@

Backed by vergex.trade

-

NOFX

-

- AI trading terminal for global markets.
- Research, strategy generation, execution, and monitoring for US stocks, commodities, forex, and crypto. + NOFX — AI trading terminal

- Stars - Release - License - Telegram -

- -

- Go - React + Stars + Release + License + Telegram

@@ -29,23 +21,29 @@ Tiếng Việt

---- +
-NOFX is an open-source AI trading terminal for active traders who want one workspace for market research, strategy development, execution, and portfolio monitoring. +NOFX is an open-source trading terminal where the strategy is a language model. Each trader runs a continuous loop — read market structure, decide, execute, record the reasoning — while a Go runtime clamps every order to hard risk limits the model cannot override. -The product is built around global liquid markets: US equities, commodity contracts, FX pairs, and digital assets. The AI layer helps translate market intent into watchlists, signals, strategy logic, risk controls, and execution workflows. +Traders compose freely: any model, any of nine exchanges, any strategy. Run several side by side and compare them on a public leaderboard by realized return. Everything runs on your own machine; exchange credentials are encrypted at rest and never leave it. ```bash curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash ``` -Open **http://127.0.0.1:3000**. +The terminal opens at `http://127.0.0.1:3000`. ---- +**First run** + +1. Register — the first account becomes the owner of the instance. +2. Follow the guided launch: put **$1+ USDC** (Base network) in the AI fee wallet it creates for you, then connect Hyperliquid and deposit **$12+ USDC** to trade with. +3. Start **Autopilot**. The AI scans the market every few minutes and trades on its own; every decision appears on the dashboard as it happens. Stop it anytime with one click. + +
## Register exchanges -Use the links below to open trading accounts for crypto and supported US stock, FX, and commodity derivative markets. These routes are part of NOFX partner programs and may include fee discounts or referral benefits. +NOFX is free and open source. Opening an account through the partner links below carries reduced trading fees and funds continued development. | Exchange | Status | Register with fee discount | | :---------------------------------------------------------------------------------------------------------------------------- | :----: | :---------------------------------------------------------------------------------- | @@ -59,59 +57,47 @@ Use the links below to open trading accounts for crypto and supported US stock, | **Aster** | ✅ | [Register](https://www.asterdex.com/en/referral/fdfc0e) | | **Lighter** | ✅ | [Register](https://app.lighter.xyz/?referral=68151432) | ---- +
-## Quick demo +## Demo https://github.com/user-attachments/assets/3310f495-14c5-4586-a1cc-3d32e44aa505 ---- +
-## Markets +## The model proposes. The runtime disposes. -**US Stocks · Commodities · Forex · Crypto** +Decisions come from a language model reading live market structure — candles, EMA/MACD/RSI/ATR/Bollinger, open interest, net flow, signal rankings. Execution does not. -NOFX organizes research, strategy construction, execution, and monitoring around multi-asset workflows instead of single-venue screens. +Every order passes through limits enforced in code, outside the model's reach: ---- +| | | +| :----------------------- | :--------------------------------------------------------------------------------- | +| Position limits | Max concurrent positions, notional capped as a ratio of equity, one position per symbol | +| Leverage clamps | Hard caps applied at order-sizing time, independent of what the model requests | +| Exchange-side protection | Stop-loss and take-profit placed on the exchange immediately after every entry | +| Drawdown auto-close | Profitable positions that give back too much from their peak are closed | +| Trade throttling | Minimum hold times, per-symbol re-entry cooldowns, per-cycle and per-hour entry limits | +| Safe mode | Repeated model failures block new entries until the model recovers | +| Launch preflight | Model access, wallet funds, strategy, and exchange balances verified before a trader may start | -## AI model access +Each decision is stored with the model's full reasoning. There is no position without a paper trail. -NOFX routes AI inference through [Claw402](https://claw402.ai) automatically. Users do not need to configure model providers, manage API keys, or maintain separate AI accounts. The terminal accesses supported models on demand through Claw402's pay-as-you-go infrastructure, with traffic routed through the official discounted channel. +
-| Provider | Access | -| :------- | :----- | -| **Claw402** | [Access pay-as-you-go AI models with official discount](https://claw402.ai) | +## Terminal ---- - -## Capabilities - -| Capability | Description | -| :-------------------------- | :-------------------------------------------------------------------------- | -| **AI trading terminal** | Unified workspace for US stocks, commodities, forex, and crypto workflows | -| **AI model access** | Unified model access through Claw402-supported providers | -| **Exchange connectivity** | Binance, Bybit, OKX, Hyperliquid, Bitget, KuCoin, Gate, Aster, and Lighter | -| **Strategy Studio** | Market universes, indicators, risk controls, and strategy logic | -| **Model competition** | Compare model-driven traders with live performance and leaderboard tracking | -| **Telegram agent** | Control and monitor the trading assistant through chat | -| **Portfolio dashboard** | Positions, P/L, execution history, and model decision logs | - ---- - -## Screenshots +| | | +| :--- | :--- | +| **Autopilot** | Guided launch: fund, connect, deposit, start — with server-side preflight throughout | +| **Strategy Studio** | Style presets, coin universes, indicators, leverage, entry confidence, custom prompts | +| **Competition** | Public leaderboard ranked by realized return, each entry attributed to its model | +| **Dashboard** | Live positions, orders, statistics, and the reasoning behind every decision |
-Config Page +Screenshots -| Configuration | Traders List | -| :----------------------------------------------------------: | :----------------------------------------------------------: | -| | | - -
- -
-Dashboard +
| Overview | Market Chart | | :-----------------------------------------------------: | :-------------------------------------------------------------: | @@ -121,131 +107,51 @@ NOFX routes AI inference through [Claw402](https://claw402.ai) automatically. Us | :--------------------------------------------------------------: | :-----------------------------------------------------------------: | | | | -| Positions | Trader Details | -| :----------------------------------------------------------: | :---------------------------------------------------: | -| | | - -
- -
-Strategy Studio - | Strategy Editor | Indicators Config | | :------------------------------------------------------: | :----------------------------------------------------------: | | | | -
- -
-Competition - -| Competition Mode | -| :-------------------------------------------------------: | -| | +| Competition | Configuration | +| :-------------------------------------------------------: | :-----------------------------------------------------------: | +| | |
---- +
-## Install +## Models -### Linux / macOS +Eight providers with your own keys — DeepSeek, OpenAI, Claude, Qwen, Gemini, Grok, Kimi, MiniMax — including custom endpoints and model names. -```bash -curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash -``` +Or no keys at all: [Claw402](https://claw402.ai) meters model usage per call in USDC over the x402 protocol. A wallet on Base replaces every API key. -### Railway (Cloud) +| Provider | Access | +| :------- | :----- | +| **Claw402** | [Pay-as-you-go AI models with official discount](https://claw402.ai) | -[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/nofx?referralCode=nofx) +## Markets -### Docker +Crypto perpetuals on all nine exchanges. On Hyperliquid, the same runtime also trades tokenized US equities, commodities, indices, FX, and pre-IPO perps — TSLA, NVDA, GOLD, SPX, EUR, OPENAI — alongside crypto. -```bash -curl -O https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml -docker compose -f docker-compose.prod.yml up -d -``` - -### Windows - -Install [Docker Desktop](https://www.docker.com/products/docker-desktop/), then: - -```powershell -curl -o docker-compose.prod.yml https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml -docker compose -f docker-compose.prod.yml up -d -``` - -### From Source - -```bash -# Prerequisites: Go 1.21+, Node.js 18+, TA-Lib -# macOS: brew install ta-lib -# Ubuntu: sudo apt-get install libta-lib0-dev - -git clone https://github.com/NoFxAiOS/nofx.git && cd nofx -go build -o nofx && ./nofx # backend -cd web && npm install && npm run dev # frontend (new terminal) -``` - -### Update - -```bash -curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash -``` - ---- - -## Setup - -**Beginner mode**: Guided onboarding walks new users through model selection, exchange connection, strategy setup, and first deployment. - -**Advanced mode**: - -1. Configure AI model access -2. Connect exchange credentials -3. Build or import a strategy -4. Create an AI trader profile -5. Launch, monitor, and iterate from the dashboard - -All configuration is available from the web UI at **http://127.0.0.1:3000**. - ---- - -## Deploy to server - -**HTTP deployment:** - -```bash -curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash -# Access via http://YOUR_IP:3000 -``` - -**HTTPS via Cloudflare:** - -1. Add domain to [Cloudflare](https://dash.cloudflare.com) (free plan) -2. A record → your server IP (Proxied) -3. SSL/TLS → Flexible -4. Set `TRANSPORT_ENCRYPTION=true` in `.env` - ---- +
## Architecture ``` - NOFX ┌─────────────────────────────────────────────────┐ │ Trading Terminal │ - │ React + TypeScript + TradingView │ - │ US Stocks · Commodities · Forex · Crypto │ + │ React · TypeScript · TradingView │ + │ Dashboard · Strategy Studio · Competition │ ├─────────────────────────────────────────────────┤ │ API Server (Go) │ + │ JWT auth · encrypted credential store │ ├──────────────┬──────────────┬───────────────────┤ - │ Strategy │ Telegram │ Trader Runtime │ - │ Engine │ Agent │ Risk Controls │ + │ Strategy │ Autopilot │ Trader Runtime │ + │ Engine │ Preflight │ Risk Engine │ ├──────────────┴──────────────┴───────────────────┤ │ AI Model Layer │ - │ Unified provider access through Claw402 │ - │ Model routing · payment · execution support │ + │ DeepSeek · OpenAI · Claude · Qwen · Gemini │ + │ Grok · Kimi · MiniMax · Claw402 (x402 USDC) │ ├─────────────────────────────────────────────────┤ │ Exchange Connectivity │ │ Binance · Bybit · OKX · Hyperliquid · Bitget │ @@ -253,26 +159,86 @@ curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bas └─────────────────────────────────────────────────┘ ``` ---- +
-## Docs +## Install + +**Linux / macOS** + +```bash +curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash +``` + +**Railway** + +[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/nofx?referralCode=nofx) + +**Docker** + +```bash +curl -O https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml +docker compose -f docker-compose.prod.yml up -d +``` + +**Windows** — install [Docker Desktop](https://www.docker.com/products/docker-desktop/), then: + +```powershell +curl -o docker-compose.prod.yml https://raw.githubusercontent.com/NoFxAiOS/nofx/main/docker-compose.prod.yml +docker compose -f docker-compose.prod.yml up -d +``` + +**From source** — Go 1.21+, Node.js 18+: + +```bash +git clone https://github.com/NoFxAiOS/nofx.git && cd nofx +go build -o nofx && ./nofx # backend +cd web && npm install && npm run dev # frontend, in a second terminal +``` + +**Update** — re-run the install script; it upgrades in place. + +
+Server deployment + +
+ +**HTTP** + +```bash +curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash +# http://YOUR_IP:3000 +``` + +**HTTPS via Cloudflare** + +1. Add the domain to [Cloudflare](https://dash.cloudflare.com) (free plan) +2. A record → server IP, proxied +3. SSL/TLS → Flexible +4. `TRANSPORT_ENCRYPTION=true` in `.env` + +
+ +
+ +## Documentation | | | | :------------------------------------------------------ | :------------------------------------ | +| [Getting Started](docs/getting-started/README.md) | Deployment and exchange API guides | | [Architecture](docs/architecture/README.md) | System design and module index | | [Strategy Module](docs/architecture/STRATEGY_MODULE.md) | Coin selection, AI prompts, execution | -| [FAQ](docs/faq/README.md) | Common questions | -| [Getting Started](docs/getting-started/README.md) | Deployment guide | +| [FAQ](docs/guides/faq.en.md) | Common questions | +| [Troubleshooting](docs/guides/TROUBLESHOOTING.md) | Diagnosing common issues | ---- +## Community + +[Telegram](https://t.me/nofx_dev_community) · [Twitter/X](https://x.com/vergex_ai) · [Issues](https://github.com/NoFxAiOS/nofx/issues) · [vergex.trade](https://vergex.trade) · [Live dashboard](https://vergex.trade/explore) ## Contributing -See [Contributing Guide](CONTRIBUTING.md), [Code of Conduct](CODE_OF_CONDUCT.md), and [Security Policy](SECURITY.md). +Code, documentation, translations, and bug reports are all welcome — see the [Contributing Guide](CONTRIBUTING.md), [Code of Conduct](CODE_OF_CONDUCT.md), and [Security Policy](SECURITY.md). -### Contributor Airdrop Program - -NOFX tracks meaningful contributions and intends to reward contributors as the ecosystem grows. Priority issues carry higher reward weight. +NOFX tracks meaningful contributions and intends to reward contributors as the ecosystem grows. Priority issues carry higher weight. | Contribution | Weight | | :---------------- | :----: | @@ -283,20 +249,9 @@ NOFX tracks meaningful contributions and intends to reward contributors as the e | Bug Reports | ★★ | | Documentation | ★★ | ---- - -## Links - -| | | -| :-------- | :---------------------------------------------------- | -| Website | [vergex.trade](https://vergex.trade) | -| Dashboard | [vergex.trade/explore](https://vergex.trade/explore) | -| Telegram | [nofx_dev_community](https://t.me/nofx_dev_community) | -| Twitter | [@vergex_ai](https://x.com/vergex_ai) | - -> **Risk warning**: Automated trading involves substantial risk. Use appropriate position sizing, understand each exchange venue, and do not trade funds you cannot afford to lose. - ---- + + Contributors + ## Sponsors @@ -314,8 +269,14 @@ NOFX tracks meaningful contributions and intends to reward contributors as the e [Become a sponsor](https://github.com/sponsors/NoFxAiOS) +
+ +If NOFX is useful to you, a star helps other traders find it. + +[![Star History Chart](https://api.star-history.com/svg?repos=NoFxAiOS/nofx&type=Date)](https://star-history.com/#NoFxAiOS/nofx&Date) + ## License [AGPL-3.0](LICENSE) -[![Star History Chart](https://api.star-history.com/svg?repos=NoFxAiOS/nofx&type=Date)](https://star-history.com/#NoFxAiOS/nofx&Date) +Automated trading involves substantial risk. AI-driven strategies are experimental and can lose money. Size positions appropriately, understand each venue, and never trade funds you cannot afford to lose. Full [disclaimer](DISCLAIMER.md). diff --git a/docs/assets/nofx-banner.svg b/docs/assets/nofx-banner.svg new file mode 100644 index 00000000..8e36e8d5 --- /dev/null +++ b/docs/assets/nofx-banner.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + nofx — ai trading terminal + + + NOFX_ + AI TRADING TERMINAL + + Language models make the decisions. + A Go runtime enforces the limits. + + + + + + + $ nofx start + preflight passed7/7 checks + trader onlinedeepseek · hyperliquid + decisionOPEN_LONGBTC ×3 + reasonoi rising · funding neutral · 4h breakout + risksl −2.5% · tp +5.0% · placed on exchange + equity$12,847pnl+4.2% + + + + + diff --git a/web/src/components/landing/AboutSection.tsx b/web/src/components/landing/AboutSection.tsx deleted file mode 100644 index 17d34c67..00000000 --- a/web/src/components/landing/AboutSection.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import { motion } from 'framer-motion' -import { Terminal, Shield, Cpu, BarChart3 } from 'lucide-react' -import { t, Language } from '../../i18n/translations' - -interface AboutSectionProps { - language: Language -} - -export default function AboutSection({ language }: AboutSectionProps) { - const features = [ - { - icon: Shield, - title: language === 'zh' ? 'Full Control' : 'Full Control', - desc: language === 'zh' ? 'Self-hosted, data secure' : 'Self-hosted, data secure', - }, - { - icon: Cpu, - title: language === 'zh' ? 'Multi-AI Support' : 'Multi-AI Support', - desc: language === 'zh' ? 'DeepSeek, GPT, Claude...' : 'DeepSeek, GPT, Claude...', - }, - { - icon: BarChart3, - title: language === 'zh' ? 'Real-time Monitor' : 'Real-time Monitor', - desc: language === 'zh' ? 'Visual trading dashboard' : 'Visual trading dashboard', - }, - ] - - return ( -
- {/* Background Decoration */} -
- -
-
- {/* Left Content */} - - - - - {t('aboutNofx', language)} - - - -

- {t('whatIsNofx', language)} -

- -

- {t('nofxNotAnotherBot', language)} {t('nofxDescription1', language)} -

- - {/* Feature Pills */} -
- {features.map((feature, index) => ( - -
- -
-
-
- {feature.title} -
-
- {feature.desc} -
-
-
- ))} -
-
- - {/* Right - Terminal */} - -
- {/* Terminal Header */} -
-
-
-
-
-
- terminal -
- - {/* Terminal Content */} -
-
$ git clone https://github.com/NoFxAiOS/nofx.git
-
$ cd nofx && chmod +x start.sh
-
$ ./start.sh start --build
-
- ✓ {t('startupMessages1', language)} -
-
- ✓ {t('startupMessages2', language)} -
-
- ✓ {t('startupMessages3', language)} -
- - - _ - -
-
- -
-
-
- ) -} diff --git a/web/src/components/landing/AnimatedSection.tsx b/web/src/components/landing/AnimatedSection.tsx deleted file mode 100644 index e2dd7ef2..00000000 --- a/web/src/components/landing/AnimatedSection.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useRef } from 'react' -import { motion, useInView } from 'framer-motion' - -export default function AnimatedSection({ - children, - id, - backgroundColor = '#F1ECE2', -}: { - children: React.ReactNode - id?: string - backgroundColor?: string -}) { - const ref = useRef(null) - const isInView = useInView(ref, { once: true, margin: '-100px' }) - - return ( - - {children} - - ) -} diff --git a/web/src/components/landing/CommunitySection.tsx b/web/src/components/landing/CommunitySection.tsx deleted file mode 100644 index 1403b8b6..00000000 --- a/web/src/components/landing/CommunitySection.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import { motion } from 'framer-motion' -import { MessageCircle, Heart, Repeat2, ExternalLink } from 'lucide-react' -import { Language } from '../../i18n/translations' - -interface TweetProps { - quote: string - authorName: string - handle: string - avatarUrl: string - tweetUrl: string - delay: number -} - -function TweetCard({ quote, authorName, handle, avatarUrl, tweetUrl, delay }: TweetProps) { - return ( - - {/* Header */} -
-
- {authorName} -
-
- {authorName} -
-
- {handle} -
-
-
- {/* X Logo */} -
- - - -
-
- - {/* Content */} -

- {quote} -

- - {/* Footer */} -
-
- - Reply -
-
- - Repost -
-
- - Like -
-
- -
-
-
- ) -} - -interface CommunitySectionProps { - language?: Language -} - -export default function CommunitySection({ language }: CommunitySectionProps) { - const tweets: TweetProps[] = [] - - return ( -
- {/* Background Decoration */} -
- -
- {/* Header */} - -

- {language === 'zh' ? 'Community Voices' : 'Community Voices'} -

-

- {language === 'zh' ? 'See what others are saying' : 'See what others are saying'} -

-
- - {/* Tweet Grid */} -
- {tweets.map((tweet, idx) => ( - - ))} -
- - {/* CTA */} - - - - - - {language === 'zh' ? 'Follow us on X' : 'Follow us on X'} - - -
-
- ) -} diff --git a/web/src/components/landing/FeaturesSection.tsx b/web/src/components/landing/FeaturesSection.tsx deleted file mode 100644 index bc26112a..00000000 --- a/web/src/components/landing/FeaturesSection.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import { motion } from 'framer-motion' -import { Brain, Swords, BarChart3, Shield, Blocks, LineChart } from 'lucide-react' -import { t, Language } from '../../i18n/translations' - -interface FeaturesSectionProps { - language: Language -} - -export default function FeaturesSection({ language }: FeaturesSectionProps) { - const features = [ - { - icon: Brain, - title: language === 'zh' ? 'AI Strategy Orchestration' : 'AI Strategy Orchestration', - desc: language === 'zh' - ? 'Support DeepSeek, GPT, Claude, Qwen and more. Custom prompts, AI autonomously analyzes markets and makes trading decisions' - : 'Support DeepSeek, GPT, Claude, Qwen and more. Custom prompts, AI autonomously analyzes markets and makes trading decisions', - highlight: true, - badge: language === 'zh' ? 'Core' : 'Core', - }, - { - icon: Swords, - title: language === 'zh' ? 'Multi-AI Arena' : 'Multi-AI Arena', - desc: language === 'zh' - ? 'Multiple AI traders compete in real-time, live PnL leaderboard, automatic survival of the fittest' - : 'Multiple AI traders compete in real-time, live PnL leaderboard, automatic survival of the fittest', - highlight: true, - badge: language === 'zh' ? 'Unique' : 'Unique', - }, - { - icon: LineChart, - title: language === 'zh' ? 'Pro Quant Data' : 'Pro Quant Data', - desc: language === 'zh' - ? 'Integrated candlesticks, indicators, order book, funding rates, open interest - comprehensive data for AI decisions' - : 'Integrated candlesticks, indicators, order book, funding rates, open interest - comprehensive data for AI decisions', - highlight: true, - badge: language === 'zh' ? 'Pro' : 'Pro', - }, - { - icon: Blocks, - title: language === 'zh' ? 'Multi-Exchange Support' : 'Multi-Exchange Support', - desc: language === 'zh' - ? 'Binance, OKX, Bybit, Hyperliquid, Aster DEX - one system, multiple exchanges' - : 'Binance, OKX, Bybit, Hyperliquid, Aster DEX - one system, multiple exchanges', - }, - { - icon: BarChart3, - title: language === 'zh' ? 'Real-time Dashboard' : 'Real-time Dashboard', - desc: language === 'zh' - ? 'Trade monitoring, PnL curves, position analysis, AI decision logs at a glance' - : 'Trade monitoring, PnL curves, position analysis, AI decision logs at a glance', - }, - { - icon: Shield, - title: language === 'zh' ? 'Open Source & Self-Hosted' : 'Open Source & Self-Hosted', - desc: language === 'zh' - ? 'Fully open source, data stored locally, API keys never leave your server' - : 'Fully open source, data stored locally, API keys never leave your server', - }, - ] - - return ( -
- {/* Background */} -
- -
- {/* Header */} - -

- {t('whyChooseNofx', language)} -

-

- {language === 'zh' - ? 'Not just a trading bot, but a complete AI trading operating system' - : 'Not just a trading bot, but a complete AI trading operating system'} -

-
- - {/* Features Grid */} -
- {features.map((feature, index) => ( - - {/* Badge */} - {feature.badge && ( -
- {feature.badge} -
- )} - - {/* Icon */} - - - - - {/* Text */} -

- {feature.title} -

-

- {feature.desc} -

- - {/* Hover Glow */} -
- - ))} -
- - {/* Bottom Stats */} - - {[ - { value: '10+', label: language === 'zh' ? 'AI Models' : 'AI Models' }, - { value: '5+', label: language === 'zh' ? 'Exchanges' : 'Exchanges' }, - { value: '24/7', label: language === 'zh' ? 'Auto Trading' : 'Auto Trading' }, - { value: '100%', label: language === 'zh' ? 'Open Source' : 'Open Source' }, - ].map((stat) => ( -
-
- {stat.value} -
-
- {stat.label} -
-
- ))} -
-
-
- ) -} diff --git a/web/src/components/landing/HeroSection.tsx b/web/src/components/landing/HeroSection.tsx deleted file mode 100644 index f3cc8e38..00000000 --- a/web/src/components/landing/HeroSection.tsx +++ /dev/null @@ -1,259 +0,0 @@ -import { motion } from 'framer-motion' -import { ArrowRight, Play, Github, Zap } from 'lucide-react' -import { Link } from 'react-router-dom' -import { t, Language } from '../../i18n/translations' -import { useGitHubStats } from '../../hooks/useGitHubStats' -import { useCounterAnimation } from '../../hooks/useCounterAnimation' -import { OFFICIAL_LINKS } from '../../constants/branding' - -interface HeroSectionProps { - language: Language -} - -export default function HeroSection({ language }: HeroSectionProps) { - const { stars, daysOld, isLoading } = useGitHubStats('NoFxAiOS', 'nofx') - const animatedStars = useCounterAnimation({ - start: 0, - end: stars, - duration: 2000, - }) - - return ( -
- {/* Animated Background */} -
- {/* Grid Pattern */} -
- {/* Radial Gradient */} -
- {/* Floating Orbs */} - - -
- -
- {/* Badge */} - - - - {isLoading ? ( - t('githubStarsInDays', language) - ) : language === 'zh' ? ( - <> - - {(animatedStars / 1000).toFixed(1)}K+ - {' '} - GitHub Stars in {daysOld} days - - ) : ( - <> - - {(animatedStars / 1000).toFixed(1)}K+ - {' '} - GitHub Stars in {daysOld} days - - )} - - - - {/* Main Title */} - - {t('heroTitle1', language)} -
- - {t('heroTitle2', language)} - - -
- - {/* Description */} - - {t('heroDescription', language)} - - - {/* CTA Buttons */} - - - - - {t('liveCompetition', language) || 'Live Competition'} - - - - - - - {t('viewSourceCode', language)} - - - - {/* Stats Row */} - - {[ - { label: 'GitHub Stars', value: `${(stars / 1000).toFixed(1)}K+` }, - { - label: language === 'zh' ? 'Exchanges' : 'Exchanges', - value: '5+', - }, - { - label: language === 'zh' ? 'AI Models' : 'AI Models', - value: '10+', - }, - { - label: language === 'zh' ? 'Open Source' : 'Open Source', - value: '100%', - }, - ].map((stat, index) => ( - -
- {stat.value} -
-
- {stat.label} -
-
- ))} -
- - {/* Powered By */} - - {t('poweredBy', language)} - -
- - {/* Scroll Indicator */} - - - - - -
- ) -} diff --git a/web/src/components/landing/HowItWorksSection.tsx b/web/src/components/landing/HowItWorksSection.tsx deleted file mode 100644 index f1e76d05..00000000 --- a/web/src/components/landing/HowItWorksSection.tsx +++ /dev/null @@ -1,167 +0,0 @@ -import { motion } from 'framer-motion' -import { Download, Rocket, TrendingUp, AlertTriangle } from 'lucide-react' -import { t, Language } from '../../i18n/translations' - -interface HowItWorksSectionProps { - language: Language -} - -export default function HowItWorksSection({ language }: HowItWorksSectionProps) { - const steps = [ - { - icon: Download, - number: '01', - title: language === 'zh' ? 'One-Click Deploy' : 'One-Click Deploy', - desc: language === 'zh' - ? 'Run a single command on your server to deploy' - : 'Run a single command on your server to deploy', - code: 'curl -fsSL https://raw.githubusercontent.com/NoFxAiOS/nofx/main/install.sh | bash', - }, - { - icon: Rocket, - number: '02', - title: language === 'zh' ? 'Access Dashboard' : 'Access Dashboard', - desc: language === 'zh' - ? 'Access your server via browser' - : 'Access your server via browser', - code: 'http://YOUR_SERVER_IP:3000', - }, - { - icon: TrendingUp, - number: '03', - title: language === 'zh' ? 'Start Trading' : 'Start Trading', - desc: language === 'zh' - ? 'Create trader, let AI do the work' - : 'Create trader, let AI do the work', - code: language === 'zh' ? 'Configure Model → Exchange → Create Trader' : 'Configure Model → Exchange → Create Trader', - }, - ] - - return ( -
- {/* Background Decoration */} -
- -
- {/* Header */} - -

- {t('howToStart', language)} -

-

- {t('fourSimpleSteps', language)} -

-
- - {/* Steps Timeline */} -
- {/* Connecting Line */} -
- -
- {steps.map((step, index) => ( - -
- {/* Number Circle */} -
- - - -
- - {/* Content */} -
-
- - {step.number} - -

- {step.title} -

-
-

- {step.desc} -

- - {/* Code Block */} -
- $ - {step.code} -
-
-
-
- ))} -
-
- - {/* Risk Warning */} - -
- -
-
-
- {t('importantRiskWarning', language)} -
-

- {t('riskWarningText', language)} -

-
-
-
-
- ) -} diff --git a/web/src/components/landing/core/DeploymentHub.tsx b/web/src/components/landing/core/DeploymentHub.tsx index dd3aa5bf..73b6457a 100644 --- a/web/src/components/landing/core/DeploymentHub.tsx +++ b/web/src/components/landing/core/DeploymentHub.tsx @@ -31,14 +31,33 @@ export default function DeploymentHub() {

- Initialize your own high-frequency trading node in seconds. - Our optimized installer handles all dependencies, bringing the trading system online with a single command. + One command on your laptop or any server installs + everything. Open the address it prints, create your + account, and the guided launch takes you to your + first AI trade in about five minutes — around $13 + is enough to start.

+ {/* the first five minutes, in plain words */} +
    + {[ + 'Register — the first account owns this instance.', + 'Fund two small wallets: $1+ for AI fees, $12+ to trade with (guided, with QR codes).', + 'Press Start — the AI trades on its own; stop it anytime.', + ].map((step, i) => ( +
  1. + + {i + 1} + + {step} +
  2. + ))} +
+
{[ - { icon: Command, label: "One-Line Install", desc: "No configuration needed" }, - { icon: Shield, label: "Secure Core", desc: "Sandboxed execution env" } + { icon: Command, label: "One-Line Install", desc: "Docker handles every dependency" }, + { icon: Shield, label: "Your Keys Stay Home", desc: "Runs on your machine, keys encrypted locally" } ].map((item, i) => (
diff --git a/web/src/components/landing/core/TerminalHero.tsx b/web/src/components/landing/core/TerminalHero.tsx index a5625087..f4363d05 100644 --- a/web/src/components/landing/core/TerminalHero.tsx +++ b/web/src/components/landing/core/TerminalHero.tsx @@ -1,6 +1,7 @@ import { motion } from 'framer-motion' import { ArrowRight, Shield, Activity, CircuitBoard, Wifi, Globe, Zap, Star, GitFork, Users, MessageCircle } from 'lucide-react' import { useState, useEffect } from 'react' +import { useNavigate } from 'react-router-dom' import { useGitHubStats } from '../../../hooks/useGitHubStats' import AgentTerminal from '../brand/AgentTerminal' @@ -16,6 +17,7 @@ const tickerLabels: Record = { } export default function TerminalHero() { + const navigate = useNavigate() // Real-time price state const [prices, setPrices] = useState>({ @@ -231,17 +233,29 @@ export default function TerminalHero() { {/* CTA Buttons */}
+
+ {/* Plain-language promise — the anti-jargon line */} +

+ Self-hosted & open source · about $13 is enough to start · guided + setup, no API keys — first trade in minutes +

+ {/* Community Stats Row */} diff --git a/web/src/components/trader/AITradersPage.tsx b/web/src/components/trader/AITradersPage.tsx index 41f3a397..278ccd39 100644 --- a/web/src/components/trader/AITradersPage.tsx +++ b/web/src/components/trader/AITradersPage.tsx @@ -3,6 +3,7 @@ import { useNavigate, useSearchParams } from 'react-router-dom' import useSWR from 'swr' import { api } from '../../lib/api' import { ApiError } from '../../lib/httpClient' +import { ROUTES } from '../../router/paths' import type { TraderInfo, CreateTraderRequest, @@ -667,8 +668,9 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { if (!setupTarget) return if (setupTarget === 'claw402') { - if (supportedModels.length === 0 && allModels.length === 0) return - handleOpenClaw402Config() + // The welcome page shows the deposit QR, auto-creates the wallet if + // needed, and polls the balance — friendlier than the key-config modal. + navigate(ROUTES.welcome) } else if (setupTarget === 'hyperliquid') { handleOpenHyperliquidConfig() } else if (setupTarget === 'hyperliquid-funds') { @@ -693,6 +695,21 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { await Promise.all([loadConfigs(), mutateTraders()]) } + const hasRunningTrader = (traders || []).some((trader) => trader.is_running) + const launchPanel = ( + + ) + return (
@@ -767,6 +784,10 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) {
+ {/* Newcomers see the guided launch FIRST — the config grid is detail. + Once an autopilot is running, the running bot takes back the top. */} + {!hasRunningTrader && launchPanel} + {/* Configuration Status Grid */} - + {hasRunningTrader && launchPanel} {/* Traders List */} = [ { - title: 'AI fee wallet', + title: 'Step 1 · Fund the AI wallet ($1+)', detail: - 'Pays Claw402.ai data and model calls with Base USDC. This is separate from trading collateral.', + 'The AI pays a tiny fee each time it thinks. Send $1 or more of USDC on the Base network to this address — from Binance, OKX, Coinbase or any wallet. Separate from your trading money.', status: feeReady ? 'ready' : 'action', meta: feeWalletAddress ? `${shortAddress(feeWalletAddress)} · ${formatUSDC(feeWalletBalance)} USDC${ feeReady ? '' : ` · needs ≥ ${minAIFeeUSDC} USDC` }` - : 'Base USDC wallet required', + : 'Takes 1 minute — we create the wallet for you', action: feeWalletAddress ? (
), }, { - title: 'Hyperliquid trading wallet', + title: 'Step 2 · Connect Hyperliquid', detail: - 'Connect an EVM wallet, approve a NOFX Agent, approve the builder fee, then save it to NOFX.', + 'Approve NOFX once with your crypto wallet (Rabby or MetaMask). This lets the AI place trades for you — it can never withdraw your money.', status: hyperliquidConnected ? 'ready' : 'action', meta: hyperliquidExchange?.hyperliquidWalletAddr ? `${shortAddress(hyperliquidExchange.hyperliquidWalletAddr)} · authorized` - : 'Agent and trading authorization required', + : 'A few clicks + 3 wallet signatures', action: ( ) @@ -584,8 +580,8 @@ export function AutopilotLaunchPanel({ Start NOFX Autopilot in minutes

- One strategy, one launch path. Fund the AI fee wallet, authorize - Hyperliquid, deposit USDC, then run the Claw402 Autopilot. + Four small steps, about $13 total. No API keys, no config + files — the AI trades for you, and you can stop it anytime.