Skip to content

Migrate to @tomny-dev/uzi framework and showcase it on the portfolio site #1

Description

@tomny-dev

Overview

Migrate tomny.dev from Material UI (MUI v7) to @tomny-dev/uzi, a lightweight React component library. The migrated site should also serve as a live showcase of the uzi framework.


Current Stack

Category Technology
UI Framework React 19 + Material UI v7
Bundler Vite 6.3+
Language TypeScript ~5.7
Styling Emotion + styled-components
Icons @mui/icons-material

Target Stack

Category Technology
UI Framework React 19 + @tomny-dev/uzi (~20 components)
Bundler Vite (unchanged)
Language TypeScript ~5.7 (unchanged)
Styling uzi's CSS modules internally
Icons lucide-react or Heroicons

Dependencies to Remove

  • @mui/material
  • @emotion/react, @emotion/styled
  • @mui/icons-material
  • styled-components
  • @mui/styled-engine-sc

New Dependency

pnpm add @tomny-dev/uzi lucide-react

Component Replacement Map

MUI uzi Equivalent
AppBar TopBar or native <nav>
Avatar <Avatar>
Chip / Badge <Pill>
Card / CardContent <Card>
Button <Button> (primary/secondary/outline/ghost)
Modal / Dialog <Modal>
TextField <Input> + <Label>
Select <Select>
Checkbox <Checkbox>
ThemeProvider + createTheme() <ThemeProvider defaultTheme="system" defaultAccent="blue">

Migration Checklist

Core Migration (8 steps)

  • Step 1 — Add @tomny-dev/uzi dependency and remove MUI packages
  • Step 2 — Replace icon library (@mui/icons-materiallucide-react)
  • Step 3 — Update app entry point: add uzi CSS import + ThemeProvider wrapper in src/main.tsx
  • Step 4 — Migrate NavBar component (AppBar → TopBar)
  • Step 5 — Migrate About section (Avatar + Pill for tech chips)
  • Step 6 — Migrate Projects section (Card grid + Button CTAs)
  • Step 7 — Simplify/remove custom theme.ts (uzi has built-in theming with accent palettes)
  • Step 8 — Update App.tsx root component (remove CssBaseline, clean up MUI imports)

uzi Showcase (4 steps)

  • Step 9 — Update About section: introduce yourself as creator of @tomny-dev/uzi; update tech chips to highlight React, Radix UI, CSS modules, TypeScript, Vite
  • Step 10 — Transform Projects section into a Features showcase with component preview cards (Button variants, Card tones, Pill colors, Modal, Toast), quick-start code snippet (pnpm add @tomny-dev/uzi), and links to GitHub/npm
  • Step 11 — Add new Components Showcase page: interactive playground with live previews of all 20+ uzi components + copyable code snippets for each
  • Step 12 — Build, verify production output, check bundle size reduction vs. MUI baseline

Expected Benefits

  • Smaller bundle: ~6 Radix UI deps vs. MUI's larger footprint
  • Cleaner API: CSS modules instead of styled-components/Emotion
  • Live demo: The portfolio site itself showcases what uzi can build
  • Simpler theming: Built-in light/dark/system + accent palettes (blue, cyan, violet, emerald, amber, rose)

Key Risks / Notes

  1. MUI sx props and styled-component patterns → must be replaced with uzi's CSS module approach
  2. No direct icon library equivalent in uzi — need to choose a replacement
  3. Theming API is completely different (MUI tokens vs. uzi accent palettes)
  4. Current site is a simple portfolio (~6 source files), so the ~20 component limit of uzi should be sufficient

Reference Files

  • src/main.tsx — App entry point, ThemeProvider wrapper
  • src/App.tsx — Root component (NavBar + About + Projects)
  • src/theme.ts — MUI theme config (remove or simplify)
  • src/components/NavBar.tsx — AppBar → TopBar
  • src/components/About.tsx — Avatar + tech chips
  • src/components/Projects.tsx — Card grid showcase

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions