Album Artwork
High-resolution album art with adaptive sizing based on layout
MiniFy is a desktop application built with Tauri and React. This page provides a comprehensive overview of the application’s features, architecture, and how all the pieces work together.
┌───────────────────────────────────────────────────────────────────────────────────┐│ MiniFy Desktop Application │├───────────────────────────────────────────────────────────────────────────────────┤│ ││ ┌──────────────────────────────────────────────────────────────────────────┐ ││ │ User Interface (React + CSS) │ ││ │ ┌──────────────────────────────────────────────────────────────────┐ │ ││ │ │ Player Views │ │ ││ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ ││ │ │ │ LayoutA │ │ LayoutB │ │ LayoutC │ │ │ ││ │ │ │ (Compact) │ │ (Standard) │ │ (Expanded) │ │ │ ││ │ │ └──────────────┘ └──────────────┘ └──────────────────────┘ │ │ ││ │ └──────────────────────────────────────────────────────────────────┘ │ ││ │ ┌────────────────────┐ ┌────────────────────┐ ┌──────────────────┐ │ ││ │ │ Settings View │ │ AI DJ View │ │ Context Menu │ │ ││ │ │ (Configuration) │ │ (Chat Interface) │ │ (Quick Access) │ │ ││ │ └────────────────────┘ └────────────────────┘ └──────────────────┘ │ ││ └──────────────────────────────────────────────────────────────────────────┘ ││ │ ││ │ IPC (Tauri Commands/Events) ││ ▼ ││ ┌──────────────────────────────────────────────────────────────────────────┐ ││ │ Backend (Rust + Tauri) │ ││ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────────────────┐ │ ││ │ │ Spotify OAuth │ │ AI Keyring │ │ Settings Manager │ │ ││ │ │ (PKCE Flow) │ │ (API Keys) │ │ (JSON Config) │ │ ││ │ └───────┬────────┘ └───────┬────────┘ └────────────┬───────────────┘ │ ││ │ │ │ │ │ ││ │ ▼ ▼ ▼ │ ││ │ ┌─────────────────────────────────────────────────────────────────────┐ │ ││ │ │ OS Credential Manager (Encrypted Keyring) │ │ ││ │ │ • Spotify Tokens • AI API Keys • Client IDs │ │ ││ │ └─────────────────────────────────────────────────────────────────────┘ │ ││ └──────────────────────────────────────────────────────────────────────────┘ ││ │ │ ││ ▼ ▼ ││ ┌─────────────────┐ ┌─────────────────┐ ││ │ Spotify API │ │ AI Providers │ ││ │ (Web API) │ │ (LLM APIs) │ ││ └─────────────────┘ └─────────────────┘ ││ │└────────────────────────────────────────────────────────────────────────────────────┘MiniFy leverages cutting-edge technologies for optimal performance and developer experience:
| Layer | Technology | Purpose |
|---|---|---|
| Runtime | Tauri 2.0 | Native app shell, system integration |
| Backend | Rust | Secure operations, OAuth, keyring access |
| Frontend | React 18 | Modern UI with hooks and functional components |
| Build | Vite | Fast development and optimized production builds |
| Styling | CSS Variables | Theme system with runtime switching |
| AI | Vercel AI SDK | Multi-provider AI integration |
| Auth | OAuth 2.0 PKCE | Secure Spotify authentication |
The main interface shows your current playback with rich information:
Album Artwork
High-resolution album art with adaptive sizing based on layout
Track Information
Track name, artist, and album with overflow handling
Progress Bar
Interactive progress bar with seeking capability
Playback Status
Real-time play/pause state with visual indicator
Full control over your Spotify playback:
| Control | Description | Keyboard |
|---|---|---|
| Play/Pause | Toggle playback | Space |
| Next Track | Skip to next song | → or N |
| Previous Track | Go back | ← or P |
| Seek | Jump to position | Click progress bar |
| Volume | Adjust volume | ↑ / ↓ |
MiniFy includes an AI-powered music assistant that understands your listening habits:
┌─────────────────────────────────────────────────────────────────────────┐│ AI DJ Capabilities │├─────────────────────────────────────────────────────────────────────────┤│ ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Music Profile Analysis │ ││ │ • Top tracks and artists (short/medium/long term) │ ││ │ • Genre preferences and distribution │ ││ │ • Audio feature analysis (energy, mood, tempo, etc.) │ ││ └─────────────────────────────────────────────────────────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Intelligent Recommendations │ ││ │ • Mood-based suggestions ("play something upbeat") │ ││ │ • History-based discovery ("more like what I've been playing") │ ││ │ • Spotify's recommendation engine integration │ ││ └─────────────────────────────────────────────────────────────────┘ ││ │ ││ ▼ ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Direct Playback Control │ ││ │ • Search and play any track │ ││ │ • Natural language commands ("find songs by...") │ ││ │ • Automatic playback of recommendations │ ││ └─────────────────────────────────────────────────────────────────┘ ││ ││ Supported Providers: OpenAI • Anthropic • Google AI • Groq ││ │└─────────────────────────────────────────────────────────────────────────┘MiniFy comes with 8 carefully crafted themes and supports custom themes:
┌────────────────────────────────────────────────────────────────────────────┐│ Theme System │├────────────────────────────────────────────────────────────────────────────┤│ ││ Built-in Themes Custom Themes ││ ───────────────── ───────────────── ││ ┌──────────────┐ ┌──────────────────────────────────┐ ││ │ • Dark │ Theme JSON → │ { │ ││ │ • Light │ │ "name": "Custom Theme", │ ││ │ • Catppuccin │ │ "colors": { │ ││ │ • Dracula │ │ "background": "#1a1b26", │ ││ │ • ChatGPT │ │ "foreground": "#c0caf5", │ ││ │ • YouTube │ │ "primary": "#7aa2f7", │ ││ │ • BMW │ │ ... │ ││ │ • Milka │ │ } │ ││ └──────────────┘ │ } │ ││ └──────────────────────────────────┘ ││ │ │ ││ └─────────────────┬───────────────────────┘ ││ ▼ ││ ┌──────────────────────────┐ ││ │ CSS Variables Applied │ ││ │ --background: #1a1b26 │ ││ │ --foreground: #c0caf5 │ ││ │ --primary: #7aa2f7 │ ││ └──────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────────────────────┘MiniFy offers flexible window options for different workflows:
| Option | Description | Use Case |
|---|---|---|
| Always on Top | Keep MiniFy above other windows | Multi-tasking |
| Multiple Layouts | Compact, Standard, Expanded | Screen space |
| Draggable | Position anywhere on screen | Custom placement |
| Resizable | Adjust to your preference | Fine-tuning |
┌───────────────────────────────────────────────────────────────────────────────┐│ Application Startup Flow │├───────────────────────────────────────────────────────────────────────────────┤│ ││ ┌─────────────────┐ ││ │ App Launches │ ││ └────────┬────────┘ ││ │ ││ ▼ ││ ┌─────────────────┐ No ┌─────────────────────────────────────┐ ││ │ Spotify Client │────────────▶│ Show Client ID Setup Screen │ ││ │ ID Configured? │ │ (User enters their own Client ID) │ ││ └────────┬────────┘ └─────────────────────────────────────┘ ││ │ Yes ││ ▼ ││ ┌─────────────────┐ No ┌─────────────────────────────────────┐ ││ │ Valid Tokens │────────────▶│ Show Connect to Spotify Button │ ││ │ in Keyring? │ │ (Initiates OAuth PKCE Flow) │ ││ └────────┬────────┘ └─────────────────────────────────────┘ ││ │ Yes ││ ▼ ││ ┌─────────────────┐ ││ │ Load Settings │◀─── Theme, Layout, AI Providers ││ │ from JSON file │ ││ └────────┬────────┘ ││ │ ││ ▼ ││ ┌─────────────────┐ ││ │ Start Token │◀─── Background task every 5 minutes ││ │ Refresh Task │ ││ └────────┬────────┘ ││ │ ││ ▼ ││ ┌─────────────────┐ ││ │ Show Player │◀─── Begin polling Spotify for current track ││ │ View │ ││ └─────────────────┘ ││ │└────────────────────────────────────────────────────────────────────────────────┘┌───────────────────────────────────────────────────────────────────────────────┐│ Main Application Loop │├───────────────────────────────────────────────────────────────────────────────┤│ ││ ┌─────────────────────────────────────────────────────────────────────────┐ ││ │ Playback Polling Loop │ ││ │ │ ││ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │ ││ │ │ Fetch │───▶│ Update React │───▶│ Re-render Components │ │ ││ │ │ Currently │ │ State │ │ (Layout, Controls, etc.) │ │ ││ │ │ Playing │ │ │ │ │ │ ││ │ └──────────────┘ └──────────────┘ └──────────────────────────┘ │ ││ │ ▲ │ ││ │ │ Wait 1-5 seconds (based on playback state) │ ││ │ └──────────────────────────────────────────────────────────────┘ ││ └─────────────────────────────────────────────────────────────────────────┘ ││ ││ ┌─────────────────────────────────────────────────────────────────────────┐ ││ │ User Interactions │ ││ │ │ ││ │ Play/Pause ─────▶ PUT /me/player/play or /pause │ ││ │ Next Track ─────▶ POST /me/player/next │ ││ │ Previous ───────▶ POST /me/player/previous │ ││ │ Seek ───────────▶ PUT /me/player/seek?position_ms=... │ ││ │ Theme Change ───▶ Update CSS variables + save to settings │ ││ │ Layout Change ──▶ Update window size + save to settings │ ││ │ │ ││ └─────────────────────────────────────────────────────────────────────────┘ ││ ││ ┌─────────────────────────────────────────────────────────────────────────┐ ││ │ Background Tasks │ ││ │ │ ││ │ Token Refresh ──▶ Every 5 min, check expiry, refresh if needed │ ││ │ │ ││ └─────────────────────────────────────────────────────────────────────────┘ ││ │└────────────────────────────────────────────────────────────────────────────────┘MiniFy is designed to be lightweight and efficient:
| Metric | Target | Description |
|---|---|---|
| Download Size | ~10MB | Significantly smaller than Electron apps |
| Memory Usage | < 50MB | Efficient Rust backend |
| CPU (Idle) | < 1% | Optimized polling intervals |
| CPU (Active) | < 3% | During playback updates |
| Startup Time | < 1s | Native performance |
MiniFy follows security best practices:
┌───────────────────────────────────────────────────────────────────────────────┐│ Security Layers │├───────────────────────────────────────────────────────────────────────────────┤│ ││ Layer 1: Authentication ││ ─────────────────────── ││ • OAuth 2.0 PKCE (most secure flow for public clients) ││ • No client secret stored in app ││ • CSRF protection with state parameter ││ ││ Layer 2: Credential Storage ││ ────────────────────────── ││ • OS-level encrypted keyring (DPAPI/Keychain/Secret Service) ││ • Tokens never stored in plain text ││ • Each credential isolated by key name ││ ││ Layer 3: Network Security ││ ───────────────────────── ││ • All API calls over HTTPS/TLS ││ • OAuth callback on localhost only ││ • No data sent to MiniFy servers ││ ││ Layer 4: AI Isolation ││ ──────────────────── ││ • AI providers never receive tokens ││ • Only metadata (track names, etc.) shared with AI ││ • Each AI key stored separately ││ │└────────────────────────────────────────────────────────────────────────────────┘| Feature | Status | Description |
|---|---|---|
| Now Playing | ✅ | Real-time track display |
| Playback Control | ✅ | Play, pause, skip, seek |
| Multiple Themes | ✅ | 8 built-in + custom themes |
| Multiple Layouts | ✅ | 3 layout options |
| Keyboard Shortcuts | ✅ | Global and in-app shortcuts |
| AI DJ | ✅ | Multi-provider AI assistant |
| Custom Themes | ✅ | JSON-based theme creation |
| Always on Top | ✅ | Window pinning |
| Cross-platform | ✅ | Windows, macOS, Linux |
Authentication
Themes
Layouts
AI DJ
Security
Shortcuts