Three coordinated package changes addressing Wave 1 cross-repo TODOs from the UI/UX roadmap (learning_ai_uxui_web/docs/ROADMAP_2026.md §10). ═══════════════════════════════════════════════════════════════════════ TODO #2 — @bytelyst/react-auth bump 0.1.8 → 0.2.0 ═══════════════════════════════════════════════════════════════════════ - Changes 'workspace:*' to 'workspace:^' for the @bytelyst/api-client dependency. On pnpm publish this resolves to a caret range (e.g. ^0.1.6) instead of '*', restoring installability for consumers. (The 0.1.6 tarball was published with a literal 'workspace:*' string — newer minor bump unblocks the showcase react-auth demo.) - 21 tests still passing. ═══════════════════════════════════════════════════════════════════════ TODO #3 — @bytelyst/dashboard-shell bump 0.1.7 → 0.2.0 ═══════════════════════════════════════════════════════════════════════ - Adds 'routePrefix?: string' prop to DashboardShellProps, SidebarProps, and TopBarProps. Threads through DashboardShell → Sidebar + TopBar. - Built-in /profile, /billing, /settings links now use the prefix: routePrefix="/app" → /app/profile, /app/billing, /app/settings - Defaults to '' (empty string) — fully back-compat with 0.1.x callers. - 2 new vitest cases covering both prefixed and default behavior; 43 / 43 tests passing (+2 from 41). ═══════════════════════════════════════════════════════════════════════ TODO #1 — @bytelyst/design-tokens bump 0.1.8 → 0.2.0 ═══════════════════════════════════════════════════════════════════════ - Adds a density-aware spacing tier on top of the existing raw --ml-space-* tier: --bl-space-scale: 1 (default :root) --bl-space-1..16: calc(--ml-space-N × --bl-space-scale) - Emits density selectors at the end of tokens.css: [data-density="compact"] { --bl-space-scale: 0.875; } [data-density="comfortable"] { --bl-space-scale: 1; } [data-density="spacious"] { --bl-space-scale: 1.125; } - Generator (scripts/generate.ts) emits both tiers automatically; the auto-generated per-product CSS files (lysnrai, mindlyst, etc.) gain a single blank-line diff from regeneration — no semantic change. - 11 / 11 token tests passing. ═══════════════════════════════════════════════════════════════════════ Decision doc — docs/ROADMAP_2026_DECISIONS.md ═══════════════════════════════════════════════════════════════════════ - Records pragmatic defaults for TODO ledger items #9–#13 so implementation work doesn't block: #9 Storybook hosting → self-hosted on Gitea Pages (free) #10 useChat protocol → adopt Vercel AI SDK shape, abstract transport #11 react-auth fold-in → defer to Wave 7 #12 dashboard-shell merge → defer to Wave 7 #13 mobile-native UI → out of scope (tokens-only sharing) - Each decision is reversible via RFC. ═══════════════════════════════════════════════════════════════════════ Publish flow ═══════════════════════════════════════════════════════════════════════ These three packages now require a release. The existing publish workflow (.gitea/workflows/publish-packages.yml) has PACKAGE_FILTER pinned to @bytelyst/errors and won't pick them up automatically — a manual workflow_dispatch with a broader filter (or the existing publish-all-packages.yml on workflow_dispatch) is needed to ship 0.2.0 to the Gitea npm registry. Refs: learning_ai_uxui_web/docs/ROADMAP_2026.md §10 TODOs #1, #2, #3, #9–#13
116 lines
4.2 KiB
Markdown
116 lines
4.2 KiB
Markdown
# UI/UX Roadmap 2026 — Pragmatic Decisions
|
||
|
||
These default decisions are recorded so implementation work can proceed
|
||
without blocking. They are **reversible** — any of them can be revisited
|
||
via an RFC in `docs/rfc/`. They are intentionally biased toward "ship
|
||
something free and reversible now, upgrade if needed."
|
||
|
||
Companion to:
|
||
|
||
- `learning_ai_uxui_web/docs/ROADMAP_2026.md` §10 TODO ledger (items #9–#13)
|
||
|
||
---
|
||
|
||
## #9 — Storybook hosting: **self-hosted, free**
|
||
|
||
**Decision.** Use Storybook 8 in each `@bytelyst/*` package, deployed
|
||
to Gitea Pages from CI. Skip Chromatic for now.
|
||
|
||
**Why.**
|
||
|
||
- Chromatic is $149/mo per project for the small plan and we have ~50
|
||
packages — not justifiable until adoption + design-team usage is
|
||
proven.
|
||
- Visual regression is already covered for product surfaces by the
|
||
showcase's Playwright `toHaveScreenshot` baselines (48 today).
|
||
- Self-hosted SB on Gitea Pages costs $0 and uses infrastructure that
|
||
already runs every other ByteLyst static site.
|
||
|
||
**Reopen if.** Designers start filing issues against story flaps that
|
||
visual-regression isn't catching, or we need cross-browser/device
|
||
coverage that local Playwright Chromium misses.
|
||
|
||
---
|
||
|
||
## #10 — `useChat` protocol: **adopt Vercel AI SDK shape, abstract transport**
|
||
|
||
**Decision.** `@bytelyst/ai-ui` exposes a `useChat` hook with the same
|
||
return shape as Vercel AI SDK's `useChat` (messages, input,
|
||
handleSubmit, stop, regenerate, isLoading, error). The **transport** is
|
||
pluggable — products inject a `fetcher` or `streamProtocol` so we are
|
||
not locked to Vercel's SSE wire format.
|
||
|
||
**Why.**
|
||
|
||
- Vercel AI SDK is the de-facto standard. Adopting the shape means
|
||
every React engineer who has written a chat UI in 2024–2026 already
|
||
knows our API.
|
||
- Abstracting transport gives us LysnrAI / JarvisJr / NoteLett the
|
||
freedom to use OpenAI-native, Anthropic-native, or our own server's
|
||
SSE protocol without forking the component.
|
||
|
||
**Reopen if.** Vercel changes the hook shape in a breaking way, or
|
||
products start needing capabilities (e.g., tool-call streaming
|
||
semantics) that the Vercel shape can't express.
|
||
|
||
---
|
||
|
||
## #11 — `react-auth` vs `auth-client`: **keep both for now, fold in Wave 7**
|
||
|
||
**Decision.** Leave `@bytelyst/react-auth` and `@bytelyst/auth-client`
|
||
as separate packages through Waves 1–6. Plan to merge `react-auth` into
|
||
`auth-client` (as `auth-client/react` subpath export) in Wave 7 once
|
||
both APIs have stabilized.
|
||
|
||
**Why.**
|
||
|
||
- `auth-client` is framework-agnostic; `react-auth` is the React
|
||
binding. Today they have different version cadences and that's fine.
|
||
- Merging now means a coordinated major-bump across both packages plus
|
||
every product app — too much churn during foundational waves.
|
||
|
||
**Reopen if.** Drift between the two packages causes a real bug or a
|
||
support burden between now and Wave 7.
|
||
|
||
---
|
||
|
||
## #12 — `dashboard-shell` vs `dashboard-components`: **keep both, defer merge**
|
||
|
||
**Decision.** Same as #11. Both packages stay independent through
|
||
Wave 6. Wave 7 re-evaluates whether to merge `dashboard-components`
|
||
into `dashboard-shell/*` subpath exports or vice versa.
|
||
|
||
**Why.** Same reasoning — the API contract isn't stable enough yet to
|
||
justify the merge cost.
|
||
|
||
---
|
||
|
||
## #13 — Mobile-native UI scope: **tokens-only sharing**
|
||
|
||
**Decision.** This roadmap (`@bytelyst/*` shared **client** packages
|
||
and the web showcase) does **not** include iOS/Android UI components.
|
||
Those live in `kotlin-platform-sdk` and `swift-platform-sdk` with their
|
||
own roadmaps. **The only thing we share across web/iOS/Android is
|
||
`@bytelyst/design-tokens`** — already generating Kotlin and Swift
|
||
output from a single JSON source.
|
||
|
||
**Why.**
|
||
|
||
- Cross-platform UI frameworks (React Native, KMP-Compose) impose
|
||
architectural constraints the web platform doesn't have.
|
||
- Token-only sharing is the proven model in the industry (Adobe Spectrum,
|
||
Shopify Polaris, Salesforce Lightning).
|
||
|
||
**Reopen if.** A product needs to ship a web + native experience in
|
||
parallel and the divergence cost gets large.
|
||
|
||
---
|
||
|
||
## Status closing TODOs
|
||
|
||
These decisions close TODO ledger items #9–#13 in
|
||
`learning_ai_uxui_web/docs/ROADMAP_2026.md`. The roadmap is updated to
|
||
strike them through with a link to this document.
|
||
|
||
Last reviewed: 2026-05-27
|