Hamcamp is a full-stack web application that was inspired by the desire to bring a Facebook music-sharing group to a wider audience.
This app takes most of its inspiration from Bandcamp
Backend: Ruby on Rails Database: PostgreSQL Frontend: React.js with a Redux architecture
Music is organized in the database by Artists, Albums, and Tracks.
Every user on Hamcamp is a musician, and albums can be created right from a user's profile page. After creating an album, tracks can be uploaded using a track upload form.
Each artist page lists out an artists' albums
.
Each album page has a song player. Each individual track can be played by clicking on that track's play button.
The search bar in the header will use an autocomplete feature in order to search for both artists and albums.
uploading: When adding/editing an album, a button will allow the user to upload individual track files. Those files will be persisted to the database.
downloading: Each individual track on an album's page has a link that allows a user to download it.
I plan to implement the following features in the future:
The foundation of Bandcamp lies in the artist being able to set the price for a song. I would like to use some sort of payments API in order to accept payments in exchange for allowing a download of songs and/or albums.
I would like to set up a system wherein users are notified when an artist uploads a new track or album. I plan to set up follows through a separate follows
table. When a followed artist uploads a track or album, all the following users are notified by e-mail.