A full-stack music streaming application built around user accounts, music discovery, playlists, and persistent playback.
Indie Vibes is a full-stack music streaming web application where users can create accounts, discover artists, listen to individual tracks, generate random playlists, and manage their playback experience from a persistent player.
I built the project as an exploration of what happens when a traditional PHP/MySQL application needs to maintain a more interactive client-side experience instead of behaving like a collection of simple CRUD pages.
Music applications combine several different pieces of functionality that need to work together: user accounts, content stored in a database, playlists, playback controls, and a responsive interface.
Indie Vibes gave me a way to bring those pieces together into one application while keeping the underlying implementation relatively straightforward and easy to understand.
One of the more interesting parts of the project was moving beyond simple page-based interaction.
The persistent player allows playback controls to remain available while users navigate through the application. Playback state, selected tracks, and playlist behaviour therefore need to remain consistent with the rest of the interface.
This made the frontend considerably more stateful than a typical PHP CRUD application and required the client-side JavaScript to work closely with the application's data.
The frontend uses HTML, CSS, and JavaScript without a frontend framework. Keeping the interface framework-free made the playback logic and application behaviour more explicit and easier to experiment with.
The backend is built with PHP, with MySQL providing persistent storage for application data such as users, artists, tracks, and playlists.
Bootstrap is used for responsive layout and common interface components while the application's core behaviour remains custom-built.
The application relies on relationships between users, artists, tracks, and playlists rather than treating each feature as an isolated page.
This made database design an important part of the project. User-specific functionality needs to remain associated with the correct account while music content can be shared across the application.
Indie Vibes started as a way to practice building a complete application rather than another isolated feature or CRUD interface.
I wanted to work with the combination of authentication, relational data, user-specific state, playlists, and a JavaScript-driven playback experience in one project.
It was also a useful exercise in understanding where the responsibilities of the backend end and where the frontend needs to take over to create a responsive user experience.
The project gave me practical experience connecting a PHP backend and MySQL database to a stateful frontend experience.
More importantly, it showed me that a working full-stack application is about more than getting individual features working. Authentication, database relationships, playback, playlists, and interface state all have to cooperate without making the application feel fragmented.
The complete source code and setup instructions are available on GitHub.