Investment trading learning app
Go to file
Saravana Achu Mac d067bea22d docs: add CODEX_RESUME_PROMPT.md for agent hand-off
Self-contained brief that any coding agent (Codex, Claude, Gemini, etc.)
running on this machine can paste in to resume the redesign+audit work.

Covers, in order:
  - Required reads (the 4 source-of-truth docs in both repos)
  - Environment setup (source ~/.zshrc for GITEA_NPM_TOKEN)
  - Verification gates per repo (must run before AND after every change)
  - 12-item priority queue with effort estimates, top to bottom
  - Commit conventions (subject `<type>(<id>):`, audit-doc tick, model
    Co-Authored-By line)
  - Six explicit "do not" rules (don't commit incidental lockfile
    regens, don't touch nomgap WIP, don't skip gates, don't bulk-fix
    platform lint, don't push --force, etc.)
  - When-to-stop-and-ask criteria so the agent doesn't guess on
    ambiguous specs or break public API surfaces

Bottom of the file has a short copy-paste prompt that points back at
this doc, so the human just pastes 7 lines into Codex and the agent
self-bootstraps from the full brief.

Refs: docs/HANDOVER.md, docs/AUDIT_REDESIGN.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 14:36:54 -07:00
backend feat: live data wiring (Alpaca/FMP) + strategy builder + screener 2026-05-04 06:16:46 -07:00
docs docs: add CODEX_RESUME_PROMPT.md for agent hand-off 2026-05-04 14:36:54 -07:00
mobile chore(infra): vendored @bytelyst/* packages, Docker healthcheck, compose merge 2026-04-29 19:35:35 -04:00
scripts chore(infra): vendored @bytelyst/* packages, Docker healthcheck, compose merge 2026-04-29 19:35:35 -04:00
shared feat(backend): WebSocket namespaces, audit persistence, tab flags, telemetry 2026-04-29 19:35:00 -04:00
vendor/bytelyst chore(infra): vendored @bytelyst/* packages, Docker healthcheck, compose merge 2026-04-29 19:35:35 -04:00
web fix(audit-A): repair the 5 critical broken integrations 2026-05-04 06:23:52 -07:00
.env.example feat(backend): WebSocket namespaces, audit persistence, tab flags, telemetry 2026-04-29 19:35:00 -04:00
.gitignore chore(audit-E2): stop stray subpackage lockfiles from coming back 2026-05-04 06:25:31 -07:00
.npmrc feat(backend): WebSocket namespaces, audit persistence, tab flags, telemetry 2026-04-29 19:35:00 -04:00
docker-compose.dev.yml chore(infra): vendored @bytelyst/* packages, Docker healthcheck, compose merge 2026-04-29 19:35:35 -04:00
docker-compose.yml feat(backend): WebSocket namespaces, audit persistence, tab flags, telemetry 2026-04-29 19:35:00 -04:00
package.json feat(backend): WebSocket namespaces, audit persistence, tab flags, telemetry 2026-04-29 19:35:00 -04:00
pnpm-lock.yaml chore(deploy): Node 20, port 4025, registry deps, platform network 2026-04-13 17:23:49 +00:00
pnpm-workspace.yaml feat: scaffold trading monorepo foundation 2026-04-04 11:18:21 -07:00
README.md feat(backend): WebSocket namespaces, audit persistence, tab flags, telemetry 2026-04-29 19:35:00 -04:00
tsconfig.base.json feat: scaffold trading monorepo foundation 2026-04-04 11:18:21 -07:00
vercel.json feat: make backend Docker-ready and web Vercel-ready 2026-04-05 19:05:35 -07:00

ByteLyst Investment Trading

Canonical monorepo for the ByteLyst trading product. Contains the backend trading engine, web dashboard, and Expo mobile app under a single pnpm workspace.

Workspaces

Package Path Description
@bytelyst/trading-backend backend/ Node.js trading engine, REST API, Socket.IO
@bytelyst/trading-web web/ React 19 dashboard (Vite)
@bytelyst/trading-mobile mobile/ Expo 54 React Native companion app
shared types shared/ Cross-surface constants, interfaces, and helpers

Core Principles

  • Backend-authoritative state — all trading state (orders, positions, capital) lives in the backend; web/mobile only read and display
  • Platform-service for auth (platform JWT), kill-switch, telemetry, and feature flags
  • Cosmos DB is primary — Azure Cosmos DB is the production control-plane store; Supabase is legacy fallback only
  • No duplicated bootstrap — auth, kill-switch, and telemetry bootstrap run once per surface via shared contracts
  • Trading domain stays product-owned — strategy logic, risk rules, and execution never move to common-platform packages

Quick Start

pnpm install
cp .env.example .env               # root — used by Docker Compose and CI
cp backend/.env.example backend/.env  # backend — fill in Cosmos, exchange, and AI credentials
cp web/.env.example web/.env.local    # web — Vite build-time API URLs
cp mobile/.env.example mobile/.env.local  # mobile — Expo build-time API URLs
pnpm verify            # typecheck + test + build — must be green before any deploy

Common Commands

# Verification (run before every merge / deploy)
pnpm verify            # typecheck + test + build across all surfaces
pnpm lint              # backend contract + security guards + web/mobile lint
pnpm smoke:release     # auth + kill-switch smoke tests

# Development
pnpm --filter @bytelyst/trading-backend dev   # backend hot-reload (tsx)
pnpm --filter @bytelyst/trading-web dev       # web Vite dev server
pnpm --filter @bytelyst/trading-mobile dev    # Expo dev server

# Docker
pnpm docker:up         # production — build images, start backend + web
pnpm docker:dev        # dev overlay — hot-reload for backend and web
pnpm docker:down       # stop all containers

Backend Verification Scripts

Beyond pnpm verify, the backend has targeted contract and safety checks:

cd backend
npm run check:api-contract          # feature-flag shapes, audit events, namespace constants
npm run check:websocket-contract    # BotState lifecycle consistency
npm run check:security-guards       # tenant isolation
npm run check:tenant-isolation      # row-level access scoping
npm run check:strict-capital-guard  # capital invariant enforcement
npm run check:lifecycle-regressions # trade lifecycle regression suite

Full list in backend/package.json under scripts.

Architecture

The backend trading loop polls every POLLING_INTERVAL (default 60 s). For each user → profile → symbol it runs the 7-rule ProStrategyEngine, then routes signals through AutoTraderriskEngineTradeExecutor → exchange connector.

7-Rule Pipeline (backend/src/strategies/rules/):

  1. TrendBiasRule — EMA 50/200 trend filter
  2. SessionRule — market hours gating
  3. ZoneRule — price proximity to S/R zones
  4. MomentumRule — RSI confirmation
  5. EntryTriggerRule — EMA reclaim / pattern detection
  6. RiskManagementRule — ATR-based stop sizing
  7. AIAnalysisRule — LLM sentiment (Perplexity → OpenAI → Gemini fallback)

WebSocket namespaces (shared/realtime.ts):

  • /trading — all authenticated users; user-scoped BotState
  • /admin — admin-only; full cross-user state; non-admins rejected at connect
  • / (root) — backward-compatible default

Persistence — Azure Cosmos DB (primary) for all runtime paths. Supabase is a legacy fallback for one-off reconciliation scripts only (documented in docs/BACKEND_LEGACY_SUPABASE_SCRIPTS.md).

Documentation

Doc Purpose
docs/PRD.md Product vision, scope, and platform integration boundaries
docs/ROADMAP.md Phase tracker and implementation snapshot
docs/OPERATIONS.md Local dev, Docker, verification, staged cutover, rollback rules
docs/CONVENTIONS.md Naming, directory structure, and import boundary rules
docs/BACKEND_AUDIT_SCHEMA.md TradeAuditEvent schema and event catalogue
docs/BACKEND_API_DEPRECATION.md Full endpoint catalogue, WebSocket namespaces, deprecation policy
docs/BACKEND_LEGACY_SUPABASE_SCRIPTS.md Legacy Supabase script inventory
docs/CUTOVER_WEB.md Stage 2 — internal web adoption checklist
docs/CUTOVER_MOBILE.md Stage 3 — mobile internal beta checklist
docs/AZURE_INFRASTRUCTURE.md Azure resource and Key Vault setup

Environment Setup

Each surface has its own .env.example. The root .env.example is the comprehensive reference covering all surfaces and is used by Docker Compose and CI:

File Usage
.env.example Root — Docker Compose, CI, complete reference for all variables
backend/.env.example Copy to backend/.env — trading engine config, secrets, feature flags
web/.env.example Copy to web/.env.local — Vite build-time vars (API URLs, feature overrides)
mobile/.env.example Copy to mobile/.env.local — Expo build-time vars (API URLs)

Minimum backend variables to run locally:

Variable Required Description
COSMOS_ENDPOINT / COSMOS_KEY / COSMOS_DATABASE Yes Primary data store (see docs/AZURE_INFRASTRUCTURE.md)
PLATFORM_API_URL Yes Platform-service base URL
PLATFORM_AUTH_ENABLED true for platform JWT (RS256); false for local dev with JWT_SECRET
PLATFORM_JWT_PUBLIC_KEY or PLATFORM_JWT_JWKS_URL Prod Platform JWT verification key
JWT_SECRET Dev Legacy/local JWT secret when PLATFORM_AUTH_ENABLED=false
ALPACA_API_KEY / ALPACA_API_SECRET For trading Exchange credentials
OPENAI_API_KEY For AI rules Primary LLM provider
ENABLE_TRADING Set true to enable live order execution (default false)
PAPER_TRADING Set true for paper mode
AZURE_KEYVAULT_URL Prod Enables auto-resolution of invttrdg-* secrets at startup

Shared Dependencies

Common-platform packages are vendored from ../learning_ai_common_plat/packages/* and linked via vendor/ at install time. See pnpm-workspace.yaml for the link strategy.

Release Checklist

pnpm verify && pnpm lint && pnpm smoke:release

All three must be green. See docs/OPERATIONS.md for the full go/no-go criteria and the staged cutover sequence (backend → web → mobile → production).