Rebuild the frontend in React + Tailwind v4 + shadcn/ui
Replace the vanilla TS/innerHTML UI layer with React 19 components:
main.ts -> App.tsx + components/ (board, timer cards, entry rows, log
sheet, login screen, filter legend + predicate editor). The IndexedDB
store, sync layer, OAuth controller, predicate tree model, and the PiP
puck stay framework-free.
The Momentum design carries over by mapping its tokens onto shadcn's
CSS variables in src/index.css. Tag autocomplete and the add-condition
menu now use portalled Radix popovers/menus, replacing the old
fixed-position clipping workarounds. Vite 5 -> 8 (Node 22 in the web
Dockerfile to satisfy Vite 8's engine range).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebuild the frontend in React + Tailwind v4 + shadcn/ui
Replace the vanilla TS/innerHTML UI layer with React 19 components:
main.ts -> App.tsx + components/ (board, timer cards, entry rows, log
sheet, login screen, filter legend + predicate editor). The IndexedDB
store, sync layer, OAuth controller, predicate tree model, and the PiP
puck stay framework-free.
The Momentum design carries over by mapping its tokens onto shadcn's
CSS variables in src/index.css. Tag autocomplete and the add-condition
menu now use portalled Radix popovers/menus, replacing the old
fixed-position clipping workarounds. Vite 5 -> 8 (Node 22 in the web
Dockerfile to satisfy Vite 8's engine range).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebuild the frontend in React + Tailwind v4 + shadcn/ui
Replace the vanilla TS/innerHTML UI layer with React 19 components:
main.ts -> App.tsx + components/ (board, timer cards, entry rows, log
sheet, login screen, filter legend + predicate editor). The IndexedDB
store, sync layer, OAuth controller, predicate tree model, and the PiP
puck stay framework-free.
The Momentum design carries over by mapping its tokens onto shadcn's
CSS variables in src/index.css. Tag autocomplete and the add-condition
menu now use portalled Radix popovers/menus, replacing the old
fixed-position clipping workarounds. Vite 5 -> 8 (Node 22 in the web
Dockerfile to satisfy Vite 8's engine range).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebuild the frontend in React + Tailwind v4 + shadcn/ui
Replace the vanilla TS/innerHTML UI layer with React 19 components:
main.ts -> App.tsx + components/ (board, timer cards, entry rows, log
sheet, login screen, filter legend + predicate editor). The IndexedDB
store, sync layer, OAuth controller, predicate tree model, and the PiP
puck stay framework-free.
The Momentum design carries over by mapping its tokens onto shadcn's
CSS variables in src/index.css. Tag autocomplete and the add-condition
menu now use portalled Radix popovers/menus, replacing the old
fixed-position clipping workarounds. Vite 5 -> 8 (Node 22 in the web
Dockerfile to satisfy Vite 8's engine range).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebuild the frontend in React + Tailwind v4 + shadcn/ui
Replace the vanilla TS/innerHTML UI layer with React 19 components:
main.ts -> App.tsx + components/ (board, timer cards, entry rows, log
sheet, login screen, filter legend + predicate editor). The IndexedDB
store, sync layer, OAuth controller, predicate tree model, and the PiP
puck stay framework-free.
The Momentum design carries over by mapping its tokens onto shadcn's
CSS variables in src/index.css. Tag autocomplete and the add-condition
menu now use portalled Radix popovers/menus, replacing the old
fixed-position clipping workarounds. Vite 5 -> 8 (Node 22 in the web
Dockerfile to satisfy Vite 8's engine range).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebuild the frontend in React + Tailwind v4 + shadcn/ui
Replace the vanilla TS/innerHTML UI layer with React 19 components:
main.ts -> App.tsx + components/ (board, timer cards, entry rows, log
sheet, login screen, filter legend + predicate editor). The IndexedDB
store, sync layer, OAuth controller, predicate tree model, and the PiP
puck stay framework-free.
The Momentum design carries over by mapping its tokens onto shadcn's
CSS variables in src/index.css. Tag autocomplete and the add-condition
menu now use portalled Radix popovers/menus, replacing the old
fixed-position clipping workarounds. Vite 5 -> 8 (Node 22 in the web
Dockerfile to satisfy Vite 8's engine range).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>