Migrate frontend from Material-UI to Tailwind CSS with shadcn/ui - #15
Merged
Merged
Conversation
Replace the MUI Joy frontend with a shadcn/ui + Tailwind CSS v4 stack styled to the lab34 brand guidelines (v1.0, August 2026): - IBM Plex Sans/Mono (self-hosted via @fontsource), Medium 500 as the heaviest weight, mono for logotype, kickers, tables, figures and code - Bone/Ink/Brass/Grey/Carbon palette mapped onto shadcn tokens for light (ink on bone) and dark (bone on ink/carbon) themes; brass used only as stroke - focus rings, rules, small marks - never a fill - lab34/proxy lockup and the "34" monogram (SVG traced from the real Plex Mono glyph outlines for the favicon), square corners throughout Functional changes along the way: - shadcn/ui primitives under src/components/ui with components.json, @/ path alias, cn() util; MUI/Emotion dependencies removed - Confirm dialogs replace window.confirm; theme toggle persisted with system fallback; log-format timestamps; compact stat tiles - Data fetching restructured (stale-response guard, lint-clean under eslint-plugin-react-hooks v7); Radix Select "all" sentinel for usage filters - PR CI now lints and builds the frontend before go test, which the go:embed of frontend/dist requires - README screenshots regenerated against the new UI Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MVP8Re7W1Z3jUeXrqzY9a
The flatted npm package ships a Go package that newer Go toolchains include in the coverage profile at 0.0% once npm ci has run, dropping the total below the threshold. Filter node_modules out of the tested package list in both workflows. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MVP8Re7W1Z3jUeXrqzY9a
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR replaces the Material-UI (Joy UI) component library with Tailwind CSS and shadcn/ui components across the entire frontend application, implementing a custom design system based on the lab34 brand guidelines.
Summary
The frontend has been completely redesigned with a new visual identity and component architecture. All pages and components now use Tailwind CSS for styling with a curated set of shadcn/ui-based components, replacing the previous Joy UI dependency.
Key Changes
Design System & Styling
@mui/joywith Tailwind CSS (@tailwindcss/vite)index.csswith Tailwind configuration and brand color definitionsComponent Library
Button,Card,Input,Label,Select,Table,Dialog,Badge,Alert,Textarea,Separator,SkeletonPageHeadercomponent for consistent section headers with index numberingConfirmDialogcomponent for confirmation flows (replacing browserconfirm())DismissibleAlertto use new Alert component with variant supportPage Updates
ModeBadgehelper, replaced modal dialogs with Radix DialogConfirmDialogfor revoke actionsStatCardtoStatTile, addedformatCompact()utility, improved filter handling withALLconstantLayout & Navigation
Layout.tsxwith new navigation structureThemeProviderfor light/dark mode managementLockup,Monogram) to layoutUtilities & Infrastructure
lib/theme.tsxfor theme management with system preference detectionlib/format.tswithformatDateTime()andformatCompact()utilitieslib/utils.tswithcn()helper for class mergingtsconfig.jsonto use@/*for cleaner importscomponents.jsonfor shadcn/ui configurationvite.config.tsto include Tailwind CSS pluginpackage.jsonwith new dependencies (Tailwind, Radix UI, Lucide, etc.)Data Fetching Patterns
useEffectwith stale flag pattern instead ofuseCallbackload()function calls withreload()tick-based approach for cleaner dependency managementAccessibility & UX
confirm()dialogs with customConfirmDialogcomponentAssets
favicon.svgwith lab34 monogram designImplementation Details
@/path alias for consistencyhttps://claude.ai/code/session_012MVP8Re7W1Z3jUeXrqzY9a