A tiny always-on-top desktop companion — styled as an LP half-slid out of its case — that sits on your desktop and controls Spotify playback. Drag it anywhere; hover it to see what's playing and control playback.
- Draggable desktop pet, click-through everywhere except its own artwork
- Hover popup: album art, track/artist, play/pause/next/prev, seekable progress bar, volume
- Spotify login via PKCE (your own Client ID — no shared secret), configured right in the app
- Global media-key support (play/pause/next/previous)
- Settings window
- General — language, volume, opacity, launch at startup, pet size, track-change notifications (with sound), sync speed, popup dismiss delay, disc spin animation, media keys, start hidden, reset to defaults
- Theme — light/dark mode, font color, LP color, case color, border on/off + border color
- History — a full-year listening heatmap, streaks, and the most-played track per day
- Spotify — Client ID setup, connection status, version info
- Korean, English, Chinese, and Japanese UI
npm installnpm start(ornpm run dev) to launch SpotI- Create your own Spotify app at https://developer.spotify.com/dashboard,
click Create app, and set the Redirect URI to exactly:
http://127.0.0.1:8765/callback - In SpotI, right-click the pet → Settings → Spotify, paste your app's Client ID, and click Save.
- Hover the pet and click Connect Spotify.
That's it — no config files to hand-edit. (Advanced/dev users can instead
set a SPOTIFY_CLIENT_ID environment variable, which takes priority.)
npm run dist builds both, in release/:
SpotI-<version>-nsis.exe— a normal Windows installer (Start Menu shortcut, uninstaller).SpotI-<version>-portable.exe— a single self-contained.exe, no install step, no admin rights, just double-click and run.
Windows: "Cannot create symbolic link" during
npm run dist? electron-builder needs permission to create symbolic links while extracting one of its own bundled tools. Turn on Settings → Privacy & security → For developers → Developer Mode, then runnpm run distagain — this is a one-time fix.
Each person who runs the built app configures their own Client ID from Settings (step 4 above) — nothing Spotify-related is baked into the build.
- Playback control (play/pause/next/previous, seeking, volume) requires Spotify Premium and an already-active Spotify Connect device (desktop app, phone, or web player open somewhere).
Electron + TypeScript, built with electron-vite. No UI framework — vanilla
DOM. Tests with vitest (npm test).