A modern, responsive browser extension manager built with React, TypeScript, and Tailwind CSS v4. This project demonstrates clean architecture, component composition, and modern React patterns including the latest React 19 features.
- Extension Management: Toggle extensions on/off, remove unwanted extensions
- Smart Filtering: Filter extensions by status (All, Active, Inactive)
- Dark Mode Support: Full dark mode implementation with system preference detection
- Responsive Design: Mobile-first approach with adaptive layouts
- Persistent State: Extensions state saved to localStorage
- Modern UI: Clean, accessible interface following Figma design specifications
- React 19 - Latest React features including new Context syntax
- TypeScript - Type-safe code with interfaces and type definitions
- Tailwind CSS v4 - Utility-first CSS with custom design tokens
- Vite - Lightning-fast build tool and dev server
- ESLint - Code quality and consistency
src/
โโโ components/ # React components
โ โโโ ExtensionCard.tsx
โ โโโ ExtensionActions.tsx
โ โโโ ExtensionInfo.tsx
โ โโโ FilterHeader.tsx
โ โโโ Header.tsx
โ โโโ Logo.tsx
โ โโโ TabButton.tsx
โโโ context/ # React Context providers
โ โโโ ExtensionsContext.tsx
โ โโโ ExtensionsProvider.tsx
โ โโโ ThemeContext.tsx
โ โโโ ThemeProvider.tsx
โโโ hooks/ # Custom React hooks
โ โโโ useExtensions.ts
โ โโโ useExtensionsState.ts
โ โโโ useFilteredExtensions.ts
โ โโโ useTheme.ts
โโโ utils/ # Utility functions
โ โโโ logoLoader.ts
โโโ assets/ # Images and icons
โโโ data.json # Extension data
โโโ index.css # Global styles and Tailwind layers
โโโ App.tsx # Main app component
โโโ main.tsx # App entry point
- Single Responsibility Principle: Each component has one clear purpose
- Composition over Inheritance: Small, reusable components composed together
- Custom Hooks: Business logic extracted into reusable hooks
- Custom Design Tokens: Spacing, colors, typography scales
- Component Classes: Reusable component styles using
@layer components - Dark Mode: Class-based dark mode with custom color schemes
- Focus States: Accessibility-first with custom focus rings
- New Context Syntax: Using
<Context value={...}>instead of<Context.Provider> - Improved Performance: Leveraging React 19's optimizations
- Node.js 18+
- npm or yarn
- Clone the repository:
git clone https://github.com/lance0821/browser-extension-manager.git
cd browser-extension-manager- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and navigate to
http://localhost:5173
npm run dev # Start development server
npm run build # Build for production
npm run lint # Run ESLint
npm run preview # Preview production build- Context API for global state (theme, extensions)
- Local component state for UI-specific state
- Custom hooks for encapsulating stateful logic
- Tailwind CSS v4 with custom configuration
- Component classes for reusable styles
- CSS-in-CSS approach (no CSS-in-JS)
- Design tokens for consistent spacing and colors
- Feature-based structure with clear separation of concerns
- TypeScript interfaces for type safety
- ESLint configuration for code quality
- Fast Refresh optimized file structure
Main card component that displays extension information and controls. Uses composition pattern with ExtensionInfo and ExtensionActions sub-components.
Manages global extension state and provides toggle/remove functionality through Context API.
Handles dark mode toggling and system preference detection with localStorage persistence.
useExtensionsState- Manages extensions data and persistenceuseFilteredExtensions- Filters extensions based on active tabuseTheme- Provides theme context accessuseExtensions- Provides extensions context access
- Mobile: Single column layout
- Tablet: Two column grid
- Desktop: Three column grid
- Adaptive typography and spacing
- Dynamic imports for logo assets
- Memoized filtering logic
- Efficient re-renders with proper component composition
- Fast Refresh for instant development feedback
- Search functionality
- Drag and drop reordering
- Extension categories
- Import/export settings
- Keyboard navigation
- Animation transitions
This project is open source and available under the MIT License.
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.
Lance Lewandowski
- GitHub: @lance0821
- LinkedIn: Lance Lewandowski
- Design inspired by Frontend Mentor challenges
- Built with modern React best practices
- Tailwind CSS v4 for styling