A music timeline guessing game built with PHP, similar to the card game "Hitster". Players listen to songs and place them in chronological order on a timeline.
- PHP 8.2 - Backend language
- MariaDB - Database
- Apache - Web server with mod_rewrite
- Docker + Docker Compose - Containerization
- Jellyfin API - Music metadata source
- Docker and Docker Compose installed
docker-compose up -d --build- Web App: http://localhost:8082
- Database Admin (Adminer): http://localhost:8081
- System: MySQL
- Server: db
- Username: groovestory
- Password: (see .env file)
- Database: groovestory
docker-compose downThe application uses a MariaDB database with the following structure:
-- Songs synced from Jellyfin
songs: id, jellyfin_id, artist, title, release_year, album, created_at
-- Game sessions
games: id, session_id, score, status, created_at, updated_at
-- Cards placed on timeline
game_cards: id, game_id, song_id, position, placed_at- Prepared Statements: All database queries use PDO prepared statements to prevent SQL injection
- Environment Variables: Credentials stored in
.envfile (gitignored) - Read-only Jellyfin Account: Dedicated service account with minimal permissions
- Input Validation: All user inputs are validated before database operations
Players guess where a song falls on a timeline by:
- Listening to a mystery song (streamed from Jellyfin)
- Placing it before or after another song based on release year
- Getting points for correct placements