myPaintings - Painting Trading Platform - Shiny Contest Submission

myPaintings - Painting Trading Platform

Authors: David Barkemeyer

Abstract: Browse and collect over 30,000 paintings from the 13th to the 19th century. Users may trade paintings with each other. Every user has her/his personal collection and wallet. Infinite scroll and custom image boxes account for a appealing display.

Full Description:

See also my other submissions:

Overview

myPaintings is my entry in the Summer 2021 - Shopfiy Developer Intern Challenge. The task was to create an image repository. So I decided to crawl more than 30,000 images from the Web Gallery of Art and build a trading platform around them.

User management

There are two types of users: user and admin. A user is allowed to collect and trade images, while an admin manages the users and monitors the database. All users log in with a user name and password.

Views

A user has three different views on paintings:

  • Browse: View all paintings
  • Collection: View and offer paintings owned by this user.
  • Buy: View and buy paintings offered by other users.

Each view consists of a filter, other settings and the painting display. The painting display contains picture boxes that are dynamically loaded via a user-defined endless scroll.

Filter

In each view, all paintings in question can be filtered according to the following characteristics:

  • Title
  • Painter
  • School
  • Type
  • Status (offered / not offered)

All features except Status support three operations:

  • = : Select exactly one available choice.
  • IN : Select multiple available choices
  • REGEXP : Select available choices corresponding to a regular expression

Any number of filter conditions can be added. Each subsequent condition is constrained by the results of the previous condition (e.g. after you select a particular painter, a subsequent title condition displays only the titles of paintings by that painter as choices).

Trade paintings

In the Collections view, a user can.

  • offer a painting for any price
  • change the price of an offered painting
  • withdraw an offered painting

In the Buy view, a user can buy an offered painting from another user.

Wallet

Each 'user' has an account balance. Selling a painting increases the account balance, buying a painting decreases it. In the Wallet tab, a user can view all past transactions and filter them by date.

Database

In the Database tab, an Admin can view all database tables. For demonstration purposes, all database tables are randomly initialised.

Deployment

All the images require more than 4GB of disk space, which exceeds the upload bundle size for shinyapps.io. Therefore, I host the application on my private Shiny server. Obviously the images are ignored by the git repository. For reproducibility, the data folder contains a script that downloads all images from the Web Gallery of Art. If needed, an image of this application can be made available on shinyapps.io with fewer images.


Keywords: paintings, image-repository, trading, user-management, infinite-scroll
Shiny app: https://mypaintings.davidbarke.com
Repo: GitHub - DavidBarke/myPaintings: Shiny Web Application for the Shopify Developer Intern Challenge
RStudio Cloud: RStudio Cloud

Thumbnail:
image

Full image: