# Flamy Trade Публичный frontend для `trade.flamy.studio`: лендинг, блог и демонстрационный дашборд ML-прогнозов по крипторынку. Проект построен на SvelteKit, Svelte 5 Runes, Tailwind CSS v4, TypeScript и `lightweight-charts`. ## Требования ```text Node.js: >=24.0.0 <25 pnpm: >=11.15.1 <12 ``` В Windows PowerShell запускайте pnpm через `pnpm.cmd`, если выполнение `.ps1`-скриптов отключено. ## Быстрый старт ```bash pnpm install pnpm dev ``` Локальный адрес по умолчанию: ```text http://localhost:5173 ``` ## Команды ```bash pnpm format # автоформатирование pnpm format:check # проверка форматирования pnpm lint # ESLint pnpm check # Svelte + TypeScript pnpm build # production build pnpm preview # preview production build pnpm audit # аудит зависимостей ``` `pnpm outdated` может показывать `@types/node` 26.x и TypeScript 7.x. Это не ошибка текущего стека: проект закреплён на Node 24 LTS, а `@sveltejs/kit` и `typescript-eslint` на текущих версиях требуют TypeScript `<6.1`. ## Конфигурация Основные изменяемые значения вынесены в `.env.example`. Публичные значения сайта: ```bash PUBLIC_SITE_URL=https://trade.flamy.studio PUBLIC_SITE_NAME=Flamy Trade PUBLIC_SITE_DESCRIPTION=Публичная витрина ML-прогнозов для крипторынка. ``` Runtime-переменные SvelteKit adapter-node: ```bash HOST=0.0.0.0 PORT=3000 ORIGIN=https://trade.flamy.studio BODY_SIZE_LIMIT=1M SHUTDOWN_TIMEOUT=15 ``` Docker Compose: ```bash APP_HOST_IP=10.20.0.20 APP_PUBLISHED_PORT=18082 APP_IMAGE_TAG= ``` ## Структура ```text src/lib/blog/posts.ts # статические статьи блога src/lib/config/site.ts # единая конфигурация сайта и canonical URL src/lib/stores/chartStore.ts # типы графика и демонстрационный provider src/lib/components/Chart.svelte # lightweight-charts компонент src/routes/healthz/+server.ts # health endpoint src/routes/sitemap.xml/+server.ts # sitemap docker/nginx/default.conf # project nginx docs/deployment.md # runbook развёртывания ``` ## Данные дашборда Текущий provider в `chartStore.ts` генерирует демонстрационные данные. Он не является реальным торговым API и не меняет контракт будущего backend. Ожидаемая форма `ChartData`: ```typescript type ChartData = { candles: Array<{ time: number; open: number; high: number; low: number; close: number }>; prediction: Array<{ time: number; value: number }>; signal: { direction: 'long' | 'short'; confidence: number; entry: number; tp: number; sl: number; }; currentPrice: number; change24h: number; change24hPct: number; }; ``` ## Блог Статьи хранятся как типизированные блоки, а не как HTML-строки. Это позволяет рендерить контент без `{@html}` и без отдельной санитаризации. ## Production Production-сборка рассчитана на схему: ```text Internet -> Caddy -> 10.20.0.20:18082 -> nginx -> app:3000 ``` Подробный порядок развёртывания, Caddy block, smoke-check и rollback описаны в [docs/deployment.md](docs/deployment.md). ## Что не входит в текущий этап Пока не подключаются: - ML-runtime; - реальный API; - S3; - база данных; - Redis; - Telegram egress; - публикация ML API через Caddy.