diff --git a/.npmrc b/.npmrc index eddfb6c..6c2b9be 100644 --- a/.npmrc +++ b/.npmrc @@ -1,5 +1,2 @@ -@bytelyst:registry=https://gitea.bytelyst.com/api/packages/ByteLyst/npm/ -# Gitea auth tokens belong in user-level ~/.npmrc or CI secrets, and are only needed -# when BYTELYST_PACKAGE_SOURCE=gitea. -# Gitea returns Docker-internal tarball URLs (172.17.0.1:3300); rewrite host to the public URL -replace-registry-host=always +link-workspace-packages=true +prefer-workspace-packages=true diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs index d0a917e..4f43d27 100644 --- a/.pnpmfile.cjs +++ b/.pnpmfile.cjs @@ -2,7 +2,8 @@ const fs = require('node:fs'); const path = require('node:path'); const PACKAGE_SCOPE = '@bytelyst/'; -const PACKAGE_SOURCE = process.env.BYTELYST_PACKAGE_SOURCE || 'common-plat'; +const requestedPackageSource = process.env.BYTELYST_PACKAGE_SOURCE || 'common-plat'; +const PACKAGE_SOURCE = requestedPackageSource === 'vendor' ? 'vendor' : 'common-plat'; const DEFAULT_COMMON_PLAT_ROOTS = [ path.resolve(__dirname, '..', 'learning_ai_common_plat'), '/opt/bytelyst/learning_ai_common_plat', @@ -70,11 +71,6 @@ function resolveSpecifier(name) { return packagePath ? `file:${packagePath}` : null; } - if (PACKAGE_SOURCE === 'gitea') { - const version = resolveRegistryVersion(name); - return version ?? null; - } - const vendorPath = pathIfPackageExists(VENDOR_PACKAGES_ROOT, name); if (vendorPath) { return `file:${vendorPath}`; diff --git a/docs/LAUNCH_READY_UI_UX_ROADMAP.md b/docs/LAUNCH_READY_UI_UX_ROADMAP.md new file mode 100644 index 0000000..651226e --- /dev/null +++ b/docs/LAUNCH_READY_UI_UX_ROADMAP.md @@ -0,0 +1,398 @@ +# Launch-Ready UI/UX Roadmap + +Last updated: 2026-05-08 + +## Purpose + +This roadmap defines the path to make the trading web product feel modern, coherent, professional, and launch-ready across the entire app. It covers the product frontend in `learning_ai_invt_trdg` and the shared UI/design-system foundation in `learning_ai_common_plat`. + +The goal is not another styling pass. The goal is a stable product-quality experience with reusable platform components that can be applied to this product and future ByteLyst products. + +## Product Standard + +The target experience is a polished operational SaaS console for trading workflows: + +- Calm, readable, premium, and practical. +- Dense enough for portfolio/trading operations without feeling cramped. +- Consistent component behavior across all routes. +- Clear primary actions and obvious next steps. +- Strong loading, empty, error, disabled, and success states. +- Responsive across desktop, tablet, and phone without broken menus, overflow, or hidden content. +- Accessible by keyboard and readable under normal contrast settings. + +## Current State Summary + +The app is functional, but launch readiness is blocked by inconsistent UI systems: + +- The shared platform primitives exist, but many product screens still use raw page-specific styling. +- `web/src/index.css` and `web/src/App.css` carry too much global/product-specific behavior. +- Complex screens such as Trade Plans, Portfolio, Backtesting, Settings/Admin, Visual Builder, and Code Editor still contain legacy visual patterns. +- Tables, cards, badges, timeline steps, forms, tabs, alerts, and empty states do not yet fully share one design language. +- Some routes look modern after recent improvements, while deeper states still look like developer tooling. +- Responsive behavior has improved, but the shell still needs a formal contract for desktop/tablet/phone. +- Global overlays such as critical alerts and the assistant widget need collision rules. + +## Guiding Principles + +1. Centralize primitives in common platform. +2. Compose product screens from approved primitives. +3. Prefer quiet utility over decorative UI. +4. Keep cards for bounded tools/items, not every page section. +5. Use semantic colors only for meaning: success, warning, danger, info. +6. Use monospace only for symbols, prices, IDs, and technical values. +7. Avoid raw HTML controls in product screens unless wrapped by a shared primitive. +8. Every user-facing state needs loading, empty, error, disabled, and success treatment. +9. Every route must pass responsive, accessibility, and overflow checks before launch. + +## Phase 0: Stop UI Drift + +Objective: prevent new inconsistent UI while remediation is underway. + +Scope: + +- Expand `pnpm audit:ui` to flag: + - raw `