Generate printable QR code cards for your custom Hitster music game
Upload a CSV of songs, match them to Spotify tracks, customize your card colors, and export a PDF ready for printing and cutting. Perfect for creating custom Hitster decks with your favorite music!
# docker-compose.yml
services:
hitster:
build: https://github.com/SixFive7/HitsterCardGenerator.git
container_name: hitster-card-generator
ports:
- "8080:8080"
environment:
TZ: Europe/Amsterdam
PUID: 1000
PGID: 1000
SPOTIFY_CLIENT_ID: your_client_id_here
SPOTIFY_CLIENT_SECRET: your_client_secret_here
restart: unless-stoppeddocker compose up -dThen open http://localhost:8080 in your browser.
Need Spotify credentials? Create an app at developer.spotify.com/dashboard to get your Client ID and Secret.
| Upload | Match |
|---|---|
![]() |
![]() |
| Preview | Export |
|---|---|
![]() |
![]() |
For production with SSL. No port exposure - Traefik handles routing.
# docker-compose.yml
services:
hitster:
build: https://github.com/SixFive7/HitsterCardGenerator.git
container_name: hitster-card-generator
environment:
TZ: Europe/Amsterdam
PUID: 1000
PGID: 1000
SPOTIFY_CLIENT_ID: your_client_id_here
SPOTIFY_CLIENT_SECRET: your_client_secret_here
labels:
traefik.enable: true
traefik.http.routers.hitster.rule: Host(`hitster.yourdomain.com`)
traefik.http.services.hitster.loadbalancer.server.port: 8080
restart: unless-stoppedMulti-architecture: Builds on both AMD64 (Intel/AMD) and ARM64 (Apple Silicon, Raspberry Pi).
| Variable | Required | Default | Description |
|---|---|---|---|
SPOTIFY_CLIENT_ID |
Yes | - | Your Spotify API client ID |
SPOTIFY_CLIENT_SECRET |
Yes | - | Your Spotify API client secret |
TZ |
No | Europe/Amsterdam |
Container timezone |
PUID |
No | 1000 |
User ID for file ownership |
PGID |
No | 1000 |
Group ID for file ownership |
Get your Spotify credentials from the Spotify Developer Dashboard. Create an app, and you'll find the Client ID and Secret in the app settings.
Unraid users: Set
PUID=99andPGID=100to match the default nobody/users permissions.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Web Browser โ
โ (Svelte 5 + Tailwind CSS v4) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP/REST
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ .NET 10 Minimal API โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ CSV Parsing โ โ Spotify โ โ PDF Export โ โ
โ โ โ โ Matching โ โ (QuestPDF) โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโโฌโโโโโโโโโ โ
โ โ โ โ
โ โผ โผ โ
โ SpotifyAPI.Web QRCoder โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Component | Technology |
|---|---|
| Backend | .NET 10 Minimal API |
| Frontend | Svelte 5 + Tailwind CSS v4 (Vite) |
| PDF Generation | QuestPDF |
| QR Codes | QRCoder |
| Spotify Integration | SpotifyAPI.Web |
Prerequisites:
- .NET 10 SDK
- Node.js 18+
- Spotify API credentials
Quick Start:
# Clone the repo
git clone https://github.com/SixFive7/HitsterCardGenerator.git
cd HitsterCardGenerator
# Set up environment (create .env or export)
export SPOTIFY_CLIENT_ID=your_client_id
export SPOTIFY_CLIENT_SECRET=your_client_secret
# Run backend (serves frontend in production mode)
cd HitsterCardGenerator
dotnet runWith Hot Reload (Frontend Development):
# Terminal 1: Backend
cd HitsterCardGenerator
dotnet run
# Terminal 2: Frontend with HMR
cd HitsterCardGenerator/web
npm install
npm run devThen open http://localhost:5173 for the Vite dev server.
The project includes an E2E test procedure executed via the project's Playwright MCP servers (see playwright/).
Test File:
tests/e2e-test-procedure.md- Complete test procedure with steps
Running Tests:
-
Start the application:
dotnet run
-
Have Claude Code execute the test procedure using the
playwright-headlessMCP server:- Open the test procedure file
- Execute each step using the appropriate MCP tool
- Verify expected outcomes at each step
Test Coverage:
- Landing page load and API connection
- CSV file upload and validation
- Spotify track matching
- Card preview with carousel
- Card flip functionality
- PDF export
- Flow restart (Start New Batch)
MIT - Feel free to use this for your own Hitster game nights!



