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:
- {weibulltools} - Interactive Package Documentation - Shiny Contest Submission
- Sensotheka - Management of Inventory, Files & Users - Shiny Contest Submission
- Distributions - Shiny Contest Submission
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 choicesREGEXP
: 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: Posit Cloud
Thumbnail:
Full image: