# 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 # аудит зависимостей ``` `prepare` намеренно выполняет `svelte-kit sync` без подавления ошибок. Если синхронизация SvelteKit падает, установка зависимостей тоже должна завершаться ошибкой. ## Конфигурация `.env.example` описывает production-настройки. Для сервера скопируйте его в `.env` и заполните значения без локальных заглушек. Основные переменные: ```bash PUBLIC_SITE_URL=https://trade.flamy.studio PUBLIC_SITE_NAME=Flamy Trade PUBLIC_SITE_DESCRIPTION=Публичная витрина ML-прогнозов для крипторынка. PUBLIC_DASHBOARD_DATA_MODE=research-static HOST=0.0.0.0 PORT=3000 ORIGIN=https://trade.flamy.studio BODY_SIZE_LIMIT=1M SHUTDOWN_TIMEOUT=15 APP_STOP_GRACE_PERIOD=20s APP_IMAGE_REPOSITORY=registry.example.com/flamy-trade APP_IMAGE_TAG= BUILD_DATE= VCS_REF= APP_HOST_IP=10.20.0.20 APP_PUBLISHED_PORT=18082 NGINX_IMAGE=nginxinc/nginx-unprivileged:1.30.4-alpine-perl@sha256:36fa38fb8f34faba45e7e1857644d6561f2faf45e7ce6b15e97d1a2a1682a0cd ``` `PUBLIC_DASHBOARD_DATA_MODE=research-static` означает, что дашборд показывает исследовательские синтетические данные. Это production-поведение текущего публичного этапа, а не интеграция с реальным торговым API. ## Структура ```text src/lib/blog/posts.ts # типизированные статьи блога src/lib/config/site.ts # единая конфигурация сайта, canonical и metadata src/lib/data/dashboard.ts # provider данных дашборда src/lib/stores/chartStore.ts # типы графика и research-static генератор src/lib/components/Chart.svelte # компонент lightweight-charts src/routes/healthz/+server.ts # health endpoint src/routes/robots.txt/+server.ts # runtime robots.txt src/routes/sitemap.xml/+server.ts # runtime sitemap docker/nginx/default.conf # nginx server config docker/nginx/includes # общие nginx include-файлы docs/deployment.md # runbook развёртывания ``` ## Production Production-схема: ```text Internet -> Caddy -> 10.20.0.20:18082 -> nginx -> app:3000 ``` Публикуется только nginx. Node-приложение доступно только во внутренней Docker-сети. Nginx запускается через unprivileged image с `cap_drop: ALL`, `read_only` и `no-new-privileges`. Подробный порядок развёртывания, Caddy block, smoke-check и rollback описаны в [docs/deployment.md](docs/deployment.md). ## Зависимости Renovate закрепляет версии и digest Docker-образов, а также ждёт 3 дня перед обновлением свежих релизов. TypeScript 6.x является осознанным compatibility hold до обновления peer constraints в SvelteKit/typescript-eslint. ## Что не входит в текущий этап - ML-runtime; - реальный торговый API; - S3; - база данных; - Redis; - Telegram egress; - публикация ML API через Caddy.