A two-sided marketplace to buy and sell secondhand vinyl records built with Ruby on Rails
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
bin
config
db
docs
lib
log
public
spec
tmp
vendor
.gitignore
.rspec
Gemfile
Gemfile.lock
README.md
Rakefile
config.ru
package.json

README.md

Long Play Records

A two-sided marketplace to buy and sell secondhand vinyl records.

logo

Presentation

Table of Contents

Getting started

These instructions will get you a copy of the project up and running on your local machine for development purposes.

Prerequisites

Ruby 2.4.1
Rails 5.1
PostgreSQL
ImageMagick 6.8.9-8 Q16 x86_64 2014-10-23
Amazon S3 Cloud Storage

Installation

Clone the repo

git clone https://github.com/julia-/long-play-records.git

Install gems

bundle install

Create .env file and add environment variables

Create Database

rails db:create

Migrate tables

rails db:migrate

Start server

rails server

Open in your browser and navigate to http://localhost:3000.

About Project

You are to design, build, deploy and present a Ruby on Rails application. You must build a two sided marketplace. This app will cater to two markets that your app brings together.

Problem

In recents years vinyl records have dramatically increased in popularity with a 25 year high in sales reached last year - even outselling digital music. Many new releases are available on vinyl and even older releases are now being reissued on vinyl. With the increased popularity of vinyl and related events such as Record Store Day and record fairs, there is greater demand for online shopfronts to facilitate the buying and selling of new, used and collectible records. With the exception of large, international sites such as Discogs, or non-specialist sites such as eBay there is little in the way of sites that focus on the secondhand and collectible record trade.

Solution

Develop a two-sided marketplace rails application to enable people to buy and sell secondhand vinyl records.

Planning

I first started thinking about who would be the audience for a secondhand record store and then from there I commenced creating user stories for sellers, buyers and buyer/sellers. I used these user stories to help define my data models and attributes and create wireframes.

To deliver what I had envisioned I decided to look at incorporating an API where I could pull in most information about releases to ensure information was correct due to multiple versions for most releases. I decided to go with the Discogs API as the database is made available under the CC0 No Rights Reserved license.

I played around with the API to help identify any other models and attributes that would be needed due to the output of the different API calls I would need to make.

I used a combination of trello and paper and pen to list and breakdown the different tasks that I would need to complete for the next two weeks. I worked out which features and tasks needed to be done to be able complete other features/tasks that were connected.

Audience

  • Music lovers
  • Fans of vinyl
  • Collectors
  • Records stores
  • Musicians/DJs
  • Lovers of secondhand goods

User stories

Buyer

1. In order to find all records by a specific artist, as a fan, I want to be able to search by an artist’s name.
2. In order to find all records an artist has made (including associated acts), as a fan, I want to see a list of all records the artist has been involved with when searching for the artist.
3. In order to find records under $20, as a buyer, I want to be able to filter by price.
4. In order to find a specific record, as a buyer, I want to be able to search by title.
5. In order to see what’s new, as a buyer, I want to be able to see a list of all recent additions.
6. In order to feel confident about what  am buying, as a buyer, I want to be able to read reviews about the seller.
7. In order to see what punk records are available for sale, as a buyer, I want to be able to limit my search by genre.
8. In order to buy a record, as a one off buyer, I want to be able to buy without creating a profile.
9. In order to buy a record at the lowest price, as a buyer, I want to be able to compare with other records.
10. In order to only see records in good condition, as a buyer, I want to be able to filter results by condition.
11. In order to select multiple records to buy later, as a buyer, I want to be able to create and save a list of records.
12. In order to not miss out on a record that’s been recently added, as a collector, I want to receive an email notification.
13. In order to feel confident my purchase was successful, as a buyer, I want to receive an email confirmation.
14. In order to see what I've previously bought, as a buyer, I want to be able to see past orders.
15. In order to go back to sellers pages that sell records I like, as a buyer, I want to be able to favourite sellers.
16. In order to see other releases by the record label, as a buyer, I want to list of suggested purchases from the label.
17. In order to buy one record quickly, as a buyer, I want to be taken straight to the checkout page.
18. In order to feel confident about the records condition, as a buyer, I want to be able to see several photos of the record.
19. In order to be able to ask the seller questions, as a potential buyer, I want to be able to message the seller.
20. In order to view conversations with sellers, as a buyer, I want to be able to view all conversations.
21. In order to share my experience, as a buyer, I want to be able to provide feedback on the site.
22. In order to return an item, as a buyer, I want to be able to find information about returns.
23. In order to keep adding items to my shopping cart, as a buyer, I want to not be directed to the shopping cart each time I add an item.
24. In order to see what I've previously bought, as a buyer, I want to be able to see past orders.
25. In order to see other releases by a label, as a buyer, I want to search view the labels other releases from the record I am looking at.
26. I want to be able to favourite certain sellers I like or see a list of sellers I've bought from before.
27. In order to see what I've previously bought, as a buyer, I want to be able to see past orders.
27. In order to see what I've previously bought, as a buyer, I want to be able to see past orders.
28. In order to know when new stock has been added, as a buyer, I want to be alerted by an email notification.

Seller

1. In order to quickly add items to my inventory, as a seller, I want to be able to populate fields through a database.
2. In order to provide buyers with as much information about the record, as a seller, I want to be able to add a description and information about the condition, price, postage, returns for the record.
3. In order to make sure I process a new order asap, as a seller, I want to be notified when new orders has been placed.
4. In order to let the buyer know if there is a delay or a problem, as a seller, I want to be able to contact the buyer.
5. In order to see all orders that have been placed for the year, as a seller, I want to be able to filter past orders.
6. In order to only see unprocessed orders, as a seller, I want to be able to mark completed orders.
7. In order to be seen as a trusted seller, as a seller, I want customers to be able to rate and review the service.
8. In order to organise the records I am selling, as a seller, I want to be able to assign genres/styles to each record.
9. In order to receive payment for each sale, as a seller, I want payments to be done through stripe, PayPal.
10. In order to promote certain records, as a seller, I want to be able feature items.

Buyer/Seller

1. In order to sell and buy records, as a collector, I want to use the same account for selling and buying.
2. In order to keep my buying and selling separate, as a collector, I want to have different views for selling and buying.

### Entity Relationship Diagram
During development I revised the ERD by removing several models and instead, displaying data from the Discogs API and only saving the necessary data from API calls.

Version 1

Entity Relationship Diagram v1

Version 2

Entity Relationship Diagram v2

Design

I began the design process by exploring online music stores to gain inspiration and ideas about how to present content. I also used this time to see what these sites are doing that could be improved in Long Play Records.

Most sites that I reviewed had a dated and chaotic design that was distracting and had no clear path for the site's visitors.

I draw inspiration in my designs from Banquet Records and in particular Boomkat records which has a simple, understated and modern design. Boomkat's user experience is intuitive as the content is displayed progressively. The site does not overwhelm the visitor with content but at the same time was able to provide comprehensive information for each item.

I wanted the design to be reminiscent of a record store with the walls lined with records. I kept my design minimal and used only used greys and whites to not take away from the cover art.

Moodboard

Moodboard

Moodboard | Long Play Records

Logo

Logo

Logo & Favicon | Long Play Records

Mobile wireframes

Mobile wireframes | Long Play Records

Mobile wireframes sample

Mobile wireframe sample

Desktop wireframes

Desktop wireframes | Long Play Records

Desktop wireframes sample

Desktop wireframe sample

Development

Requirements

  • PostgreSQL Database
  • API
  • Gems
  • Environmental variables
  • Transactional emails
  • Internal user messaging system
  • Searching capability
  • Sorting capability
  • Filtering capability
  • File uploading
  • Authentication
  • Authorisation
  • Admin dashboard (optional)
  • README

Trello

Trello | Long Play Records Trello sample

Technologies

Ruby 2.4.1
Rails 5.1
PostgreSQL
Amazon S3 Cloud Storage

API

Discogs API

Gems

gem 'dotenv-rails'
gem 'devise'
gem 'pundit'
gem 'aws-sdk', '~> 3'
gem 'bootstrap', '~> 4.0.0.beta2.1'
gem 'jquery-rails'
gem 'fastimage'
gem 'image_processing'
gem 'mini_magick'
gem 'shrine'
gem 'httparty'
gem 'font-awesome-rails'
gem 'money'
gem 'kaminari'
gem 'stripe'
gem 'mailgun-ruby', '~>1.1.6'
gem 'meta-tags'

Challenges and final thoughts

  • The data models and attributes.
  • Working with an API - it was time consuming but rewarding process.
  • What I should save and what I can't from the API.
  • Discovering that Discogs API doesn't let you download the images.
  • Using Bootstrap.

Future developments

  • Design and layout
  • Shopping cart
  • Wishlist
  • Saved sellers
  • Landing page
  • Store page for each seller
  • Rating and reviews
  • Update payment to Stripe Connect
  • Improve searching for records on sale

Acknowledgments

Discogs API

Vinyl record by Aidan Cooke from the Noun Project

Long Play Records was designed and developed for Coder Academy's Term Two Major Project.