──────────────────────────────────────────────────────────────────
docs/design-system/ANTIPATTERNS.md (CC.6 — new file)
──────────────────────────────────────────────────────────────────
Twelve anti-patterns codified, every product engineer + AI agent
should treat as a hard 'no':
1. Hard-coded colour / spacing / radius values
2. Bespoke skeleton / spinner / empty-state per surface
3. Bespoke tag editor / searchable select
4. Raw API responses inside React state
5. Hidden privacy / cost / refusal state
6. Motion without prefers-reduced-motion
7. SSR-unsafe ID generation (Math.random)
8. console.log / console.error in production
9. Cross-product imports
10. `any` (especially in public API surfaces)
11. Untested primitives in @bytelyst/*
12. Animations that block keyboard focus
Each entry has Smell → Why it's wrong → Do this instead, with
canonical `@bytelyst/*` references.
──────────────────────────────────────────────────────────────────
packages/ai-ui/src/DebugOverlay.tsx (audit cleanup)
──────────────────────────────────────────────────────────────────
Dropped dead `patchSingleChild` helper. It cloned the single child
unchanged, doing literally nothing — the click handler always lived
on the outer <span>. Replaced the call site with `{children}` and
removed 4 unused React imports (Children, cloneElement,
isValidElement, ReactElement).
Same 98/98 tests pass.
──────────────────────────────────────────────────────────────────
Roadmap flips (this commit + the prior unflag pass)
──────────────────────────────────────────────────────────────────
9.E.1 <Markdown> + citation interop ai-ui@0.6.0
9.E.2 <CodeDiff> split + unified ai-ui@0.6.0
9.E.3 <ExplainThis> ai-ui@0.6.0
9.E.4 usePromptHistory ai-ui@0.6.0
9.E.5 useTokenCount ai-ui@0.6.0
9.E.6 /showcase/ai-ui/markdown showcase
13.C.4 <ProvenanceDrawer> ai-ui@0.5.0+
13.C.5 <DebugOverlay> ai-ui@0.5.0+
13.C.6 <PrivacyBadge> ai-ui@0.5.0+
13.D.1 <Parallax> motion@0.2.1
13.D.5 <TiltGallery> motion@0.2.1
CC.6 ANTIPATTERNS.md docs
MAG.8 /showcase/futurism/debug-overlay showcase
§11.2 counter rewrote (37 / 202 done · 18%)
Wave 9 Data: 9/42 → 15/42 (36%)
Wave 13 Futurism: 9/39 → 17/39 (44%)
Cross-cutting: 0/8 → 1/8 (13%)
Magnet demos: 2/8 → 3/8 (38%)
Three MAG.* magnets are now live:
✨ MAG.1 spatial-hero (Wave 13.D.6)
✨ MAG.3 trust-surfaces (Wave 13.C.7)
✨ MAG.8 debug-overlay (Wave 13.C.5)
|
||
|---|---|---|
| __LOCAL_LLMs | ||
| .changeset | ||
| .gitea/workflows | ||
| .github | ||
| .husky | ||
| .windsurf/workflows | ||
| AI.dev | ||
| dashboards | ||
| docs | ||
| e2e | ||
| packages | ||
| products | ||
| reports | ||
| scripts | ||
| services | ||
| .aider.conf.yml | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.ecosystem.example | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| .prettierrc | ||
| .size-limit.cjs | ||
| AGENTS.md | ||
| docker-compose.ecosystem.yml | ||
| docker-compose.yml | ||
| eslint.config.js | ||
| MANUAL_CI.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| quick-check.sh | ||
| README.md | ||
| REPO_CONTEXT.md | ||
| tsconfig.base.json | ||
| vitest.config.ts | ||
ByteLyst Common Platform
Shared packages and microservices for ByteLyst ecosystem products.
⚠️ GitHub Actions Temporarily Disabled
CI/CD is currently disabled due to billing issues. Please run manual quality checks before merging:
- See MANUAL_CI.md for instructions
- Use
.windsurf/workflows/production-readiness.mdfor comprehensive checks
Quick Start
# Install dependencies
pnpm install
# Build all packages + services
pnpm build
# Quick quality check (5 min) - run before pushing!
./quick-check.sh
# Run all tests
pnpm test
# Type-check all packages
pnpm typecheck
# Run a specific service in dev mode
pnpm --filter @lysnrai/platform-service dev
Prototype Deployment
For a single-host prototype, use Docker Compose with the repo root docker-compose.yml.
cp .env.example .env
./scripts/prototype-up.sh
pnpm prototype:self-test
pnpm docker:clean
See docs/PROTOTYPE_DEPLOYMENT.md for the required environment variables and day-to-day commands.
The prototype stack now includes a local Cosmos DB Emulator container, so the default .env.example values are wired for single-VM Docker use.
Blob uploads are backed by local Azurite, prototype email delivery is backed by Mailpit, and the platform exposes prototype diagnostics at /api/health/dependencies, /api/self-test, and /api/self-test.json.
Current Capability Surface
- Shared packages — 36
@bytelyst/*packages covering auth, config, API clients, storage, sync, telemetry, diagnostics, design tokens, SDK support, and testing. - Services —
platform-service,extraction-service,mcp-server, andmonitoring. - Dashboards —
admin-web,tracker-web, andux-lab. - MCP/A2A —
services/mcp-server/exposes tool routing, platform operator tools, extraction helpers, dev tools, product namespaces, and A2A orchestration pipelines.
Ecosystem Docs
Cross-product strategy and shared-contract documentation now lives under docs/ecosystem/.
Repository Structure
learning_ai_common_plat/
├── packages/ # 36 shared libraries (@bytelyst/*)
│ ├── api-client/
│ ├── auth/
│ ├── auth-client/
│ ├── blob/ + blob-client/
│ ├── broadcast-client/ + survey-client/
│ ├── config/ + cosmos/
│ ├── dashboard-components/
│ ├── design-tokens/
│ ├── diagnostics-client/ + swift-diagnostics/
│ ├── events/ + fastify-core/
│ ├── extraction/ + llm/ + speech/
│ ├── feature-flag-client/ + feedback-client/ + kill-switch-client/
│ ├── kotlin-platform-sdk/ + swift-platform-sdk/ + react-native-platform-sdk/
│ ├── logger/ + monitoring/ + testing/
│ ├── offline-queue/ + platform-client/ + sync/ + telemetry-client/
│ └── datastore/ + storage/ + push/
├── dashboards/ # Product-agnostic and internal web workspaces
│ ├── admin-web/ # Platform admin console (port 3001)
│ ├── tracker-web/ # Issue tracker + public roadmap (port 3003)
│ └── ux-lab/ # Internal UX lab / MCP-assisted ops prototypes
├── services/ # Platform services + tooling servers
│ ├── platform-service/ # Product-agnostic platform API (port 4003)
│ ├── extraction-service/ # LangExtract text extraction + Python sidecar (port 4005)
│ ├── mcp-server/ # MCP tool server + A2A orchestration
│ └── monitoring/ # Loki + Grafana config, health-check
└── docs/ # Architecture docs, roadmap, analysis
Package Families
| Family | Representative Packages | Purpose |
|---|---|---|
| Core platform | @bytelyst/config, @bytelyst/cosmos, @bytelyst/errors, @bytelyst/logger, @bytelyst/testing |
Shared infrastructure for all services and dashboards |
| Auth & app clients | @bytelyst/auth, @bytelyst/auth-client, @bytelyst/api-client, @bytelyst/platform-client, @bytelyst/react-auth |
Identity, auth flows, typed service clients |
| Diagnostics & telemetry | @bytelyst/diagnostics-client, @bytelyst/telemetry-client, @bytelyst/swift-diagnostics |
Client diagnostics, event batching, crash/error capture |
| Storage & sync | @bytelyst/blob, @bytelyst/blob-client, @bytelyst/datastore, @bytelyst/storage, @bytelyst/sync, @bytelyst/offline-queue |
Blob, local persistence, sync orchestration |
| Product experience | @bytelyst/feature-flag-client, @bytelyst/feedback-client, @bytelyst/broadcast-client, @bytelyst/survey-client, @bytelyst/kill-switch-client |
Runtime platform features for product apps |
| AI & extraction | @bytelyst/extraction, @bytelyst/llm, @bytelyst/speech |
Extraction tasks, LLM utilities, speech integration |
| UI & design | @bytelyst/design-tokens, @bytelyst/dashboard-components |
Shared tokens and dashboard UI building blocks |
| Native SDKs | @bytelyst/swift-platform-sdk, @bytelyst/kotlin-platform-sdk, @bytelyst/react-native-platform-sdk |
Cross-platform mobile/native platform access |
Services and Dashboards
| Surface | Port | Description |
|---|---|---|
platform-service |
4003 | Product-agnostic Fastify platform API: auth, flags, telemetry, diagnostics, jobs, analytics, A/B testing, changelog, webhooks, marketplace, predictive analytics, and more |
extraction-service |
4005 | LangExtract-based extraction service with task library and Python sidecar |
mcp-server |
configurable | MCP server exposing tool execution, platform tools, dev tools, extraction helpers, and A2A orchestration pipelines |
monitoring |
— | Loki, Grafana, and health-check tooling |
admin-web |
3001 | Platform admin console |
tracker-web |
3003 | Tracker / public roadmap dashboard |
ux-lab |
internal | Internal UX lab and ops prototyping workspace |
Note: billing-service (4002), growth-service (4001), and tracker-service (4004) were consolidated into platform-service (Feb 2026).
All services are product-agnostic — every Cosmos document includes a productId field, so a single deployment serves LysnrAI, MindLyst, or any future product.
Consuming Libraries from Product Repos
During development, use file: references in consumer package.json:
// From a Next.js dashboard at repo root (2 levels up):
"@bytelyst/errors": "file:../../learning_ai_common_plat/packages/errors"
// From MindLyst web (3 levels up — inside mindlyst-native/web/):
"@bytelyst/design-tokens": "file:../../../learning_ai_common_plat/packages/design-tokens"
All repos must be cloned side-by-side under the same parent directory.
Portable Builds (Docker / CI)
file: refs break in Docker and CI because the sibling repo isn't available at the expected relative path. Use the tarball prep workflow to make builds self-contained:
# 1. Build all @bytelyst/* packages
pnpm build
# 2. Pack tarballs + rewrite a consumer's package.json
# (run from the consumer repo)
../learning_ai_common_plat/scripts/prep-consumer.sh <target-dir>
# 3. Build (Docker, EAS, CI — no sibling repo access needed)
docker build <target-dir>
# 4. Restore original package.json
../learning_ai_common_plat/scripts/prep-consumer.sh <target-dir> --restore
Each consumer repo has a convenience wrapper: scripts/docker-prep.sh (or scripts/docker-prep-dashboards.sh in LysnrAI).
| Consumer Repo | Wrapper Script | Targets |
|---|---|---|
learning_voice_ai_agent |
scripts/docker-prep-dashboards.sh |
user-dashboard-web |
learning_ai_clock |
scripts/docker-prep.sh |
web |
learning_ai_fastgap |
scripts/docker-prep.sh |
root package.json |
learning_multimodal_memory_agents |
scripts/docker-prep.sh |
mindlyst-native/web |
Dashboards inside this repo (
dashboards/admin-web,dashboards/tracker-web) useworkspace:*refs and do NOT need this workflow — pnpm resolves them automatically.
Infrastructure Lint
Validates all 25 Dockerfiles across the 11 ByteLyst repos using hadolint, and any Helm charts using helm lint + helm template.
# Prerequisites
brew install hadolint helm
# Lint everything
./scripts/lint-infra.sh
# Dockerfiles only / Helm charts only
./scripts/lint-infra.sh --docker
./scripts/lint-infra.sh --helm
# Explicit paths
./scripts/lint-infra.sh path/to/Dockerfile path/to/chart-dir
Suppressed rules (false positives for this codebase): DL3045, DL3018, DL3008, DL3059, SC2155.
Design Tokens
Generate platform-specific token files from the canonical JSON:
cd packages/design-tokens
pnpm generate
Outputs in packages/design-tokens/generated/:
tokens.css— CSS custom properties (--ml-*)tokens.ts— TypeScript constantsMindLystTokens.kt— Kotlin object for KMPMindLystTheme.swift— Swift structs for SwiftUI
Roadmap
See docs/ROADMAP.md for the full phased extraction plan.