soundwave/docs/THEMES.md
Iulian 51679d1943 Initial commit - SoundWave v1.0
- Full PWA support with offline capabilities
- Comprehensive search across songs, playlists, and channels
- Offline playlist manager with download tracking
- Pre-built frontend for zero-build deployment
- Docker-based deployment with docker compose
- Material-UI dark theme interface
- YouTube audio download and management
- Multi-user authentication support
2025-12-16 23:43:07 +00:00

235 lines
5.8 KiB
Markdown

# SoundWave Themes
SoundWave now includes 4 beautiful themes that users can switch between from the Settings page.
## Available Themes
### 1. Dark (Default)
**Description**: Original dark theme with indigo and deep purple accents
- **Primary Color**: #5C6BC0 (Indigo)
- **Secondary Color**: #7E57C2 (Deep Purple)
- **Background**: #0A0E27 (Very dark blue) / #151932 (Dark blue-gray)
- **Best For**: Late-night listening sessions, OLED displays
### 2. Ocean Blue
**Description**: Vibrant blue theme with cyan accents
- **Primary Color**: #2196F3 (Bright Blue)
- **Secondary Color**: #00BCD4 (Cyan)
- **Background**: #0D1B2A (Deep ocean blue) / #1B263B (Dark blue)
- **Best For**: Users who love blue aesthetics, calming vibes
### 3. Light
**Description**: Clean light theme with excellent readability
- **Primary Color**: #1976D2 (Blue)
- **Secondary Color**: #9C27B0 (Purple)
- **Background**: #F5F7FA (Light gray-blue) / #FFFFFF (Pure white)
- **Best For**: Daytime use, bright environments, accessibility
### 4. Forest Green
**Description**: Nature-inspired green theme
- **Primary Color**: #4CAF50 (Green)
- **Secondary Color**: #00E676 (Bright green)
- **Background**: #0D1F12 (Deep forest green) / #1A2F23 (Dark green)
- **Best For**: Users who prefer green themes, natural aesthetics
## How to Use
### For Users
1. Navigate to **Settings** page (gear icon in sidebar)
2. Find the **Appearance** section
3. Choose your preferred theme from:
- Dropdown selector
- Visual theme preview cards
4. Theme changes instantly and persists across sessions
### For Developers
#### Theme Structure
```typescript
// Located in: frontend/src/theme/theme.ts
export type ThemeMode = 'dark' | 'blue' | 'white' | 'green';
export const themes: Record<ThemeMode, Theme> = {
dark: darkTheme,
blue: blueTheme,
white: whiteTheme,
green: greenTheme,
};
```
#### Using Theme Context
```tsx
import { useThemeContext } from '../AppWithTheme';
function MyComponent() {
const { themeMode, setThemeMode } = useThemeContext();
// Get current theme
console.log(themeMode); // 'dark' | 'blue' | 'white' | 'green'
// Change theme
setThemeMode('blue');
}
```
#### Theme Persistence
Themes are automatically saved to `localStorage`:
```typescript
// Save theme preference
saveThemePreference('blue');
// Get saved preference
const savedTheme = getThemePreference(); // Returns 'dark' as default
```
## Adding a New Theme
1. **Define the theme in `theme.ts`**:
```typescript
const myNewTheme = createTheme({
palette: {
mode: 'dark', // or 'light'
primary: { main: '#FF0000' },
secondary: { main: '#00FF00' },
background: {
default: '#000000',
paper: '#111111',
},
text: {
primary: '#FFFFFF',
secondary: '#CCCCCC',
},
},
typography: baseTypography,
shape: baseShape,
components: baseComponents,
});
```
2. **Add to theme collection**:
```typescript
export type ThemeMode = 'dark' | 'blue' | 'white' | 'green' | 'mynew';
export const themes: Record<ThemeMode, Theme> = {
// ... existing themes
mynew: myNewTheme,
};
export const themeNames: Record<ThemeMode, string> = {
// ... existing names
mynew: 'My New Theme',
};
```
3. **Add colors to ThemePreview** (`components/ThemePreview.tsx`):
```typescript
const themeColors = {
// ... existing colors
mynew: {
primary: '#FF0000',
secondary: '#00FF00',
bg1: '#000000',
bg2: '#111111',
text: '#FFFFFF',
},
};
```
## Theme Features
### Automatic Switching
- Themes switch instantly without page reload
- All Material-UI components adapt automatically
- Custom components using `theme` props update in real-time
### Responsive Design
- All themes work across all screen sizes
- Theme preview cards are responsive (6 cols on mobile, 3 on desktop)
- Dropdown selector available for quick switching
### Accessibility
- Light theme provides high contrast for readability
- All themes meet WCAG color contrast guidelines
- Theme choice persists across sessions
### Components Affected
All Material-UI components automatically use theme colors:
- Buttons, Cards, Dialogs
- Text fields, Selects, Switches
- Navigation (Sidebar, TopBar)
- Player controls
- All page components
## Technical Details
### Theme Provider Hierarchy
```
main.tsx
└─ AppWithTheme (Theme Context Provider)
└─ ThemeProvider (Material-UI)
└─ CssBaseline
└─ App (Main application)
```
### State Management
- Theme state managed by React Context
- Preference stored in localStorage
- No backend API calls needed
- Instant theme switching
### Performance
- Themes are pre-created at import time
- No runtime theme generation
- Minimal re-renders on theme change
- localStorage access is synchronous
## Screenshots
### Settings Page - Appearance Section
- Dropdown selector for quick theme change
- Visual preview cards showing theme colors
- Selected theme is highlighted
- Hover effects for better UX
### Theme Preview Cards
Each card shows:
- Theme name
- Gradient background
- Sample UI elements (header, text, accent)
- Checkmark on selected theme
- Hover animation with theme-colored shadow
## Future Enhancements
Potential theme-related features:
- [ ] Custom theme creator (user-defined colors)
- [ ] Theme import/export
- [ ] Automatic theme switching based on time of day
- [ ] System theme detection (dark/light mode)
- [ ] Per-component theme overrides
- [ ] Theme marketplace/community themes
- [ ] Animated theme transitions
- [ ] Theme presets for colorblind users
## Browser Support
Themes work on all modern browsers:
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Opera 76+
No polyfills needed for theme functionality.
## Credits
- Material-UI theming system
- Color palettes inspired by Material Design
- Theme persistence using Web Storage API
---
**Last Updated**: December 15, 2025
**Current Version**: 1.0
**Total Themes**: 4