Skip to content

Shadcn/Tailwind refactor: CSS utility migration, UI components, layout polish - #1

Merged
xcheljd merged 21 commits into
mainfrom
chore/tailwind-core-css
Apr 22, 2026
Merged

xcheljd merged 21 commits into
mainfrom
chore/tailwind-core-css

Conversation

@xcheljd

@xcheljd xcheljd commented Apr 21, 2026

Copy link
Copy Markdown
Owner

Summary

This branch migrates the entire CSS codebase to Tailwind utilities and integrates shadcn/ui components throughout the app.

CSS Migration (79% overall reduction)

  • core.css: 894 → 369 lines (59%)
  • charts.css: 279 → 31 lines (89%)
  • dashboard.css: 1,037 → 54 lines (95%)
  • modules.css: 1,335 → 307 lines (77%)
  • Settings.css: 1,206 → 253 lines (79%)

Shadcn/UI Components Added

  • Checkbox, Badge, Progress, Separator, Alert
  • Sheet, ToggleGroup, AlertDialog, Dialog+Select
  • Card, Radio Group, Table, Chart

Layout & UX Improvements

  • Symmetric 20px spacing around search bar (header-to-search and search-to-cards)
  • Sticky search bar with view toggle (grid/list/table)
  • Compact list view with left accent bar on hover
  • New table view for modules
  • Seamless theme-aware loading screen
  • Consistent z-index scale and dialog positioning
  • Prettier formatting across all files

Test plan

  • Verify all three module views (grid, list, table) render correctly
  • Confirm search bar sticks on scroll with proper spacing
  • Check light/dark themes across all views
  • Validate dialog animations and z-index stacking
  • Run npm run lint and npm run format:check (both passing)

xcheljd and others added 21 commits April 18, 2026 09:55
Move hand-written CSS to Tailwind utility classes in App.js and LoadingScreen.js.
Add header/loading/sidebar color tokens to @theme block for Tailwind usage.
Keep only :nth-child animations and ::after pseudo-elements in CSS.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ion)

Replace chart-container, chart-card, chart-controls with Tailwind utilities.
Use shadcn Card component for chart cards. Convert all inline styles
to Tailwind classes. Keep only heatmap intensity CSS (uses CSS custom properties).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…eduction)

Use shadcn Card/CardHeader/CardTitle/CardContent for dashboard sections.
Convert StudyStreak, GoalCard, UpcomingMilestones, SmartRecommendations
to Tailwind utilities. Keep only dashboard layout, grid-pair, and
CircularProgress SVG styles in CSS. Update tests to match new selectors.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…duction)

Convert ModuleList, ModuleDetail, VideoCard, ConfidenceRating, GoalModal
to Tailwind utility classes. Keep only pseudo-element styles, nth-child
animation delays, custom checkbox styling, and keyframe animations in CSS.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…eduction)

Convert all settings tabs (Theme, Dashboard, Data Management, Resources,
YouTube, About), WelcomeDialog, and YoutubeSigninDialog to Tailwind
utilities. Keep only Radix dialog overrides, drag-and-drop states, custom
checkboxes, and keyframe animations in CSS. Also fix nav button arrows
to use lucide-react ChevronLeft/ChevronRight for perfect vertical centering.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…Alert)

Replace custom checkbox implementations in VideoCard, ModuleDetail, and
DashboardTab with shadcn Checkbox. Replace inline badges with shadcn Badge
in StudyStreak, ThemeTab, and DashboardTab. Replace milestone progress bar
with shadcn Progress in StudyStreak. Replace border dividers with Separator.
Replace video-note, warning-banner, confidence-hint, danger-zone with Alert.
Clean up now-unused CSS for checkboxes and section-checkboxes.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…elect, normalize z-index scale

- Phase 2: Remove hamburger sidebar, add Settings gear icon, blurBounceIn animation
- Phase 3: Convert 3 toggle groups to shadcn ToggleGroup (ModuleList, PerformanceCharts, header)
- Phase 4: Replace 4 window.confirm() calls with AlertDialog (GoalCard, DashboardTab, ResourcesPathTab, YoutubeTab)
- Phase 5: Replace GoalModal overlay with Dialog, native select with shadcn Select
- Normalize z-index: 40 (loading), 50 (dialogs), 60/70 (alert), 80 (select), 90 (toast)
- Default time range changed from 30 to 7 days

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ngs.css cleanup

- Phase 6: RadioGroup installed (ConfidenceRating kept as raw buttons -- better accessibility)
- Phase 7: Replace custom ToastProvider with Sonner adapter (backward-compatible useToast API)
- Fix dialog centering: use CSS translate property instead of transform to avoid animation conflicts
- Fix dialog animations: explicit fadeIn/fadeOut keyframes replace Tailwind animate-in/out (no slide)
- Fix z-index: header z-[45] sits below dialog overlay z-50
- Remove blanket !important dialog overrides from Settings.css
- Settings and GoalModal widened to max-w-3xl (768px)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…abels

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Inline theme CSS variables in index.html <head> before first paint
- Static loader and React LoadingScreen now visually identical
  (network icon, title, pulsing progress bar)
- Removed spinner, status text, and percentage from LoadingScreen
- Moved video hint text below video list in ModuleDetail
- Aligned Resources heading margin to match Videos heading

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
- Removed translate-y/translate-x/scale hover effects across all cards,
  buttons, tabs, recommendations, heatmap cells
- Restored hover:-translate-y-1 on ConfidenceRating (intentional interaction)
- Replaced rgba(0,0,0,0.08) with hsl(var(--foreground)/0.08) for dark theme support
- Replaced hardcoded blue focus ring with hsl(var(--primary)/...) in ResourcesPathTab
- Added hover:border-primary to module list view cards

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ct list view

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…ents

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
… tests, all thresholds passing)

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@xcheljd
xcheljd merged commit 4049d6d into main Apr 22, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant