A Spotify-powered party game inspired by Hitster. One screen, no phones needed — the app plays a random song from your Spotify playlists, the group debates the release year, and the host flips the card to reveal the answer.
The key difference from the original: bring any Spotify playlist. No physical cards, no preset content.
- Host logs in with Spotify and picks playlists (default HITSTER playlists or your own)
- Hit START FØRSTE SANG — the app picks a random song and starts playing it on your Spotify device
- Group listens and guesses the release year
- Host flips the card to reveal artist, song title, and year
- Repeat
No scoring. No phones. Just music and social play.
- Spotify Premium account (required for playback control via Spotify API)
- A Spotify app with OAuth credentials (see setup below)
- PostgreSQL database
- Node.js 20+
git clone https://github.com/yourusername/mixster
cd mixster
npm install- Go to Spotify Developer Dashboard
- Create a new app
- Add
http://127.0.0.1:5173/auth/callback/spotifyas a Redirect URI (and your production URL when deploying) - Copy your Client ID and Client Secret
cp .env.example .envFill in .env:
DATABASE_URL=postgresql://user:password@localhost:5432/mixster
SPOTIFY_CLIENT_ID=your_client_id
SPOTIFY_CLIENT_SECRET=your_client_secret
PUBLIC_APP_URL=http://127.0.0.1:5173npm run db:pushnpm run devOpen http://127.0.0.1:5173.
- Push to GitHub
- Import project in Vercel
- Add environment variables (same as
.env, with production values) - Add your Vercel deployment URL as a Redirect URI in your Spotify app
- SvelteKit 2 + Svelte 5 (runes)
- Drizzle ORM + PostgreSQL
- Tailwind CSS v4
- Arctic for Spotify OAuth (PKCE)
- Vercel
- Playlist selections are stored in
localStorage— tied to the browser, intentional for party use - Play history (7-day dedup) is stored in the database so songs don't repeat within a session
- All Spotify API calls are proxied server-side — the browser never holds Spotify tokens
- Norwegian UI copy by design (the game is Norwegian in origin)
- Requires Spotify Premium for playback control (Spotify API limitation, not ours)