The digital Clough Art Crawl is an interactive digital art gallery serving as an alternative to the typically in-person, bi-annual event.
On the front-end, the project uses 7 open source JavaScript libraries and 1 front-end framework:
- OpenSeadragon - v.2.4.2 to display high-resolution zoomable images and leverages the Deep Zoon tiles to do so.
- Splide.js - latest version to create a touch-friendly and mobile-responsive image slider.
- Splide.js video extension for adding videos to image slider.
- Shuffle.js - latest version to create a sortable, filterable, and searchable interactive grid of images.
- jQuery - v.3.5.1
- Popper.js (included with Bootstrap)
- Images Loaded for image event listener added to
grid.js
- Bootstrap - v.4.5.2 for styling.
On the back-end, the project is built on top of a simple Node.js server via Express. User data is stored in data.json
and rendered dynamically using EJS. Currently, all assets are stored on the server, except for a few libraries that are accessed via CDNs (which need to be added eventually):
- jQuery
- Popper.js
- Bootstrap
- Splide.js Video Extension
- Images Loaded
Below is a suggested workflow for obtaining, validating, and processing the user submitted data following the workflow I drafted as I experimented with the various data and media needed to create the prototype. In the interest of reducing the workload for IT&D, I would be happy to manage the setup for deployment process.
Setting up the project for production in three steps:
- Acquire, sanitize, and validate student info and media files
- Organize student info as a
.json
file - Create copies of student images for different uses within app
Summary: Receive student info and media in such a way that 1) the info can be efficiently validated and sanitized, and 2) the data can easily be converted to a .json
file.
Info and media needed to power the app could be submitted via a Qualtrics survey, for which we've created a draft. Considerations for data submitted by users includes validating and sanitizing the data, e.g. prevent cross-site scripting. Qualtrics provides some basic validation, e.g. setting max length/max characters on text submissions.
I am open to using an alternative to Qualtrics. I recognize that other alternatives may be more efficient and better equpiied at validation and sanititization.
Media Type | Extensions | Use | User Submitted? |
---|---|---|---|
Image - Full Size | .jpeg, .jpg, .png | Slider | x |
Image - Thumbnail | .jpg | Grid | |
Image - DZI | .dzi | OpenSeadragon viewer | |
Audio | .mp3, .ogg(?) | /audio/:id |
x |
Video | n/a | Slider | x |
-
After validating and sanitizing data, create
data.json
file with objects representing artists and their data:{ "Username": "String (50 char max)", "First Name": "String (50 char max)", "Last Name": "String (50 char max)", "Major": "String (50 char max)", "College": "String (dropdown option)", "Title of Artwork": "String (x char max)", "Artist Statement": "String (150 char max(?))", "Media": "String ('Media', 'Audio', or 'Video')", "Media Upload Location": "String ('youtube' or 'vimeo')", "Media URL": "String (for 'Audio' or 'Video' -- 100 char max)", "Image File": "File (extensions: .jpg, .jpeg, .png)" }
-
Alphabetize
data.json
using./utils/sort.js
Students submit full-sized copies of the images they would like to represent their art. After submission, three copies for each image will need to be created: a small 65px x 65 px thumbnail for the grid, deep zoom tiles for the OpenSeadragon viewer, and copy with a compressed width of 1080px for the slider.
I have written a script (./utils/images.js
) using sharp - a Node.js image processing package - that creates these three additional image files.
Workflow:
- In
utils/
, createartcrawl_full_size/
folder and add images submitted by students. - Either create three other folders (
./dzi/
, and./thumbnails/
, and./artcrawl_1080/
) or direct script to write newly created images files to../public/images/dzi/
,../public/images/thumbnails/
, and../public/images/artcrawl/
. - From
utils
run the scriptcd utils node images.js
- Separate server for assets