335 lines
7.1 KiB
Markdown
335 lines
7.1 KiB
Markdown
|
|
# StreamFlow Logo & PWA Icons
|
||
|
|
|
||
|
|
## 🎨 Brand Colors
|
||
|
|
|
||
|
|
**Primary Gradient:**
|
||
|
|
- Start: `#a855f7` (Purple)
|
||
|
|
- End: `#3b82f6` (Blue)
|
||
|
|
|
||
|
|
**Theme Colors:**
|
||
|
|
- Light Mode Primary: `#a855f7`
|
||
|
|
- Dark Mode Primary: `#a855f7`
|
||
|
|
- Secondary: `#3b82f6`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📱 PWA Icons (Rounded)
|
||
|
|
|
||
|
|
All icons feature rounded corners for modern PWA aesthetics:
|
||
|
|
|
||
|
|
### Available Sizes (SVG)
|
||
|
|
- ✅ 72x72 (rounded: 16px)
|
||
|
|
- ✅ 96x96 (rounded: 21px)
|
||
|
|
- ✅ 128x128 (rounded: 28px)
|
||
|
|
- ✅ 144x144 (rounded: 32px)
|
||
|
|
- ✅ 152x152 (rounded: 34px)
|
||
|
|
- ✅ 192x192 (rounded: 42px)
|
||
|
|
- ✅ 384x384 (rounded: 84px)
|
||
|
|
- ✅ 512x512 (rounded: 112px)
|
||
|
|
|
||
|
|
**Location:** `/frontend/public/icons/icon-{size}.svg`
|
||
|
|
|
||
|
|
**Format:** SVG with purple-blue gradient background, white play button with flow lines
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🖼️ Icon Features
|
||
|
|
|
||
|
|
1. **Gradient Background** - Purple to blue diagonal gradient
|
||
|
|
2. **Play Button** - Clean white triangle (95% opacity)
|
||
|
|
3. **Flow Lines** - Dynamic curved lines suggesting streaming motion (40% opacity)
|
||
|
|
4. **Rounded Corners** - Approximately 22% radius of total size
|
||
|
|
5. **Maskable** - Safe zone for all platform icon cropping
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🌐 Web App Usage
|
||
|
|
|
||
|
|
### Favicon
|
||
|
|
- **File:** `/frontend/public/favicon.svg`
|
||
|
|
- **Size:** 32x32px
|
||
|
|
- **Type:** SVG
|
||
|
|
- **Usage:** Browser tab icon
|
||
|
|
|
||
|
|
### Manifest Icons
|
||
|
|
All icons referenced in `/frontend/public/manifest.json`:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"icons": [
|
||
|
|
{
|
||
|
|
"src": "/icons/icon-192x192.svg",
|
||
|
|
"sizes": "192x192",
|
||
|
|
"type": "image/svg+xml",
|
||
|
|
"purpose": "any maskable"
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### HTML Meta Tags
|
||
|
|
```html
|
||
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||
|
|
<link rel="apple-touch-icon" href="/icons/icon-192x192.svg" />
|
||
|
|
<meta name="theme-color" content="#a855f7" />
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📦 Android APK Icons
|
||
|
|
|
||
|
|
For Android builds (Capacitor/Cordova):
|
||
|
|
|
||
|
|
### Resource Directories
|
||
|
|
```
|
||
|
|
android/app/src/main/res/
|
||
|
|
├── mipmap-mdpi/ic_launcher.png (48x48)
|
||
|
|
├── mipmap-hdpi/ic_launcher.png (72x72)
|
||
|
|
├── mipmap-xhdpi/ic_launcher.png (96x96)
|
||
|
|
├── mipmap-xxhdpi/ic_launcher.png (144x144)
|
||
|
|
├── mipmap-xxxhdpi/ic_launcher.png (192x192)
|
||
|
|
└── mipmap-anydpi-v26/ic_launcher.xml (adaptive)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adaptive Icon (Android 8+)
|
||
|
|
Uses rounded SVG icons with safe zone for various launcher shapes.
|
||
|
|
|
||
|
|
**Conversion Command:**
|
||
|
|
```bash
|
||
|
|
# Install ImageMagick or use online converter
|
||
|
|
for size in 72 96 144 192; do
|
||
|
|
inkscape -w $size -h $size \
|
||
|
|
frontend/public/icons/icon-${size}x${size}.svg \
|
||
|
|
-o android/res/mipmap-*/ic_launcher.png
|
||
|
|
done
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🐧 Linux AppImage Icons
|
||
|
|
|
||
|
|
For Electron AppImage builds:
|
||
|
|
|
||
|
|
### Icon Path
|
||
|
|
**Source:** `/frontend/public/icons/icon-512x512.svg`
|
||
|
|
|
||
|
|
**Electron Config:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"build": {
|
||
|
|
"linux": {
|
||
|
|
"icon": "frontend/public/icons/icon-512x512.svg",
|
||
|
|
"category": "AudioVideo"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Desktop Entry
|
||
|
|
```ini
|
||
|
|
[Desktop Entry]
|
||
|
|
Name=StreamFlow
|
||
|
|
Exec=streamflow
|
||
|
|
Icon=streamflow
|
||
|
|
Type=Application
|
||
|
|
Categories=AudioVideo;Video;Player;
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔐 2FA / Security Icons
|
||
|
|
|
||
|
|
For future 2FA implementation:
|
||
|
|
|
||
|
|
### Logo Component
|
||
|
|
**File:** `/frontend/src/components/Logo.jsx`
|
||
|
|
|
||
|
|
**Usage:**
|
||
|
|
```jsx
|
||
|
|
import Logo from './components/Logo';
|
||
|
|
|
||
|
|
// In component
|
||
|
|
<Logo size={64} /> // 2FA QR code header
|
||
|
|
<Logo size={40} /> // Sidebar
|
||
|
|
<Logo size={32} /> // Notification icon
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2FA Badge Icon
|
||
|
|
Can overlay small shield icon on Logo component for security contexts.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎭 Logo Variations
|
||
|
|
|
||
|
|
### Current Implementation
|
||
|
|
- **Main Logo:** Gradient play button with flow lines
|
||
|
|
- **Favicon:** Simplified 32x32 version
|
||
|
|
- **Component:** React component with dynamic sizing
|
||
|
|
|
||
|
|
### Future Variants (if needed)
|
||
|
|
- **Monochrome:** White version for dark backgrounds
|
||
|
|
- **Outline:** Line-only version for minimal contexts
|
||
|
|
- **Badge:** Small circular variant without text
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📐 Design Specifications
|
||
|
|
|
||
|
|
### Play Button
|
||
|
|
- **Position:** Centered
|
||
|
|
- **Triangle Points:** Left-aligned, pointing right
|
||
|
|
- **Fill:** White (#ffffff) at 95% opacity
|
||
|
|
|
||
|
|
### Flow Lines
|
||
|
|
- **Style:** Curved bezier paths
|
||
|
|
- **Stroke:** White 2-4px (scales with size)
|
||
|
|
- **Opacity:** 40%
|
||
|
|
- **Purpose:** Suggest streaming/flow motion
|
||
|
|
|
||
|
|
### Corner Radius
|
||
|
|
- Formula: `size * 0.22` (22% of icon size)
|
||
|
|
- Examples:
|
||
|
|
- 72px → 16px radius
|
||
|
|
- 192px → 42px radius
|
||
|
|
- 512px → 112px radius
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Quick Commands
|
||
|
|
|
||
|
|
### View Icons
|
||
|
|
```bash
|
||
|
|
# Open all icons in browser
|
||
|
|
cd frontend/public/icons
|
||
|
|
python3 -m http.server 8080
|
||
|
|
# Visit: http://localhost:8080
|
||
|
|
```
|
||
|
|
|
||
|
|
### Validate PWA Icons
|
||
|
|
```bash
|
||
|
|
# Check manifest
|
||
|
|
cat frontend/public/manifest.json | jq .icons
|
||
|
|
|
||
|
|
# Test with Lighthouse
|
||
|
|
lighthouse http://localhost:12345 --view
|
||
|
|
```
|
||
|
|
|
||
|
|
### Generate PNG from SVG (if needed)
|
||
|
|
```bash
|
||
|
|
# Install rsvg-convert
|
||
|
|
sudo apt install librsvg2-bin
|
||
|
|
|
||
|
|
# Convert all sizes
|
||
|
|
for svg in frontend/public/icons/*.svg; do
|
||
|
|
png="${svg%.svg}.png"
|
||
|
|
rsvg-convert "$svg" -o "$png"
|
||
|
|
done
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ Checklist
|
||
|
|
|
||
|
|
**PWA Setup:**
|
||
|
|
- [x] SVG icons created (8 sizes)
|
||
|
|
- [x] Rounded corners applied
|
||
|
|
- [x] Manifest.json updated
|
||
|
|
- [x] Favicon created
|
||
|
|
- [x] HTML meta tags updated
|
||
|
|
- [x] Theme colors updated to purple-blue
|
||
|
|
- [x] Logo component created
|
||
|
|
|
||
|
|
**Android APK (Future):**
|
||
|
|
- [ ] Convert SVG to PNG for mipmap directories
|
||
|
|
- [ ] Create adaptive icon XML
|
||
|
|
- [ ] Test on various Android launchers
|
||
|
|
- [ ] Verify safe zone compliance
|
||
|
|
|
||
|
|
**Linux AppImage (Future):**
|
||
|
|
- [ ] Set icon path in electron-builder config
|
||
|
|
- [ ] Generate .desktop file
|
||
|
|
- [ ] Test icon on Ubuntu/Fedora/Arch
|
||
|
|
- [ ] Verify system tray icon
|
||
|
|
|
||
|
|
**2FA Integration (Future):**
|
||
|
|
- [ ] Add Logo to 2FA setup page
|
||
|
|
- [ ] Create security badge variant
|
||
|
|
- [ ] Add to email templates
|
||
|
|
- [ ] Include in authenticator app QR codes
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎨 Color Palette Reference
|
||
|
|
|
||
|
|
```css
|
||
|
|
/* CSS Variables for Brand Colors */
|
||
|
|
:root {
|
||
|
|
--purple-500: #a855f7;
|
||
|
|
--purple-400: #c084fc;
|
||
|
|
--purple-600: #9333ea;
|
||
|
|
--blue-500: #3b82f6;
|
||
|
|
--blue-400: #60a5fa;
|
||
|
|
--blue-600: #2563eb;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* Gradient */
|
||
|
|
background: linear-gradient(135deg, #a855f7 0%, #3b82f6 100%);
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📱 Platform-Specific Notes
|
||
|
|
|
||
|
|
### iOS Safari
|
||
|
|
- Uses `apple-touch-icon` meta tag
|
||
|
|
- Recommended: 180x180 PNG (use 192x192 SVG)
|
||
|
|
- Background color from manifest.json
|
||
|
|
|
||
|
|
### Android Chrome
|
||
|
|
- Uses manifest.json icons
|
||
|
|
- Supports maskable icons (all icons have `purpose: "any maskable"`)
|
||
|
|
- Adaptive to device launcher style
|
||
|
|
|
||
|
|
### Desktop PWA
|
||
|
|
- Uses largest available icon (512x512)
|
||
|
|
- SVG format ensures crisp rendering at any scale
|
||
|
|
- Favicon used for browser tab
|
||
|
|
|
||
|
|
### Electron/AppImage
|
||
|
|
- Linux: 512x512 recommended
|
||
|
|
- Windows: .ico format (multi-resolution)
|
||
|
|
- macOS: .icns format (if needed)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 Updates & Maintenance
|
||
|
|
|
||
|
|
### Changing Logo Colors
|
||
|
|
Edit gradient stops in all SVG files:
|
||
|
|
```xml
|
||
|
|
<linearGradient id="grad1">
|
||
|
|
<stop offset="0%" style="stop-color:#NEW_COLOR_1" />
|
||
|
|
<stop offset="100%" style="stop-color:#NEW_COLOR_2" />
|
||
|
|
</linearGradient>
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adjusting Corner Radius
|
||
|
|
Update `rx` attribute in `<rect>` elements:
|
||
|
|
```xml
|
||
|
|
<rect width="192" height="192" rx="42" fill="url(#grad1)"/>
|
||
|
|
```
|
||
|
|
|
||
|
|
### Version Control
|
||
|
|
When updating logo:
|
||
|
|
1. Update all SVG files in `/frontend/public/icons/`
|
||
|
|
2. Update `favicon.svg`
|
||
|
|
3. Update `Logo.jsx` component
|
||
|
|
4. Increment `CACHE_NAME` in `service-worker.js`
|
||
|
|
5. Update manifest.json if needed
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Logo Status:** ✅ Production Ready
|
||
|
|
**Last Updated:** December 10, 2025
|
||
|
|
**Format:** SVG (Scalable Vector Graphics)
|
||
|
|
**License:** Proprietary (StreamFlow IPTV Application)
|