Skip to content

Book search web application created using VueJS and vanilla CSS. This front-end project aims to explore various design effects to enhance UI/UX, such as 3D and hover CSS effects.

Notifications You must be signed in to change notification settings

faithtanlh/paperbound

Repository files navigation



A front-end application for book lovers.
View Demo

image

About The Project

Paperbound is a web application built using Vue.js that allows users to search for their favourite book titles and browse their various book cover editions.

Being an ardent reader, I was always looking out for ways to enhance the user experience of book readers like me who wish to browse their favourite books online without taking away the joy of picking them up physically from their shelves. Thus, this is a front-end application that is meant to be a user experience design case study of challenging myself to explore the ways to improve the user experience for online book browsers.

Technologies Used

Front End

  • VueJS Framework
  • Font Awesome icons
  • Vanilla CSS for styling

API

Testing

  • Jest for unit testing

Setup

Clone the repository using Git.

$ git clone git@github.com:faithtanlh/paperbound.git

Once downloaded, open the terminal in the project directory and install project dependencies:

npm install

Compiles and hot-reloads for development

npm run serve

Compiles and minifies for production

npm run build

Run local unit tests

npm run test:unit

Design Considerations

1. Shelving Design for Home Page

The Home page is designed by implementing a stack of ShelfRow custom components (see ShelfRow.js). Using Vue's <slot> elements, each ShelfRow component contains three slots into which three template elements can be conditionally rendered. These slots are placed as inline-block elements, under which a Shelf custom styled component (which appears as a 2D shelf representation on the webpage) is rendered. Thus, ShelfRow components mimic the behaviour of bookshelves, whereby slots can be used to "place objects".

These ShelfRow components are used to conditionally render new Book components (which represent books and appear as book covers on the shelves) upon fetching data from the API endpoint (see HomeView.js).

2. Loading Animation During Fetch

Whilst the data is being fetched from the Covers API, a loading spinner is displayed underneath the search bar, which provides users visibility of system status. This was implemented using a listener fetched that returns true only when the fetch Promise has been fulfilled.

3. Book On Hover Animation

Book components have on hover animations that mimic the action of picking up books from shelves. This effect was done by animating the component through upwards translations and skew parameters.

4. Route Transitions

To create a more seamless user experience, vertical fade-out Vue router transitions were used when routing from one page to another, which complemented the overall vertical geography of the Home page.

5. Back Button

The back navigation element on the BookDetails page allows users to easily navigate backwards to the Home page. A scale animation was set on hover to provide additional feedback that the element is clickable.

6. Search Results and Scroll Position Saved On Navigation

When navigating back to the Home page from the BookDetails page, the previous search results are re-rendered and the search bar will contain the user's prior search inputs. A smooth scroll animation after back navigation enables the user to scroll down to their last scroll position before they had navigated away from the Home page.

This design feature was made to allow users to quickly revisit the progress of their book search, and this was implemented using local storage (to store fetched data and search input values) and Vue Router's route meta fields (to store scroll position parameters).

About

Book search web application created using VueJS and vanilla CSS. This front-end project aims to explore various design effects to enhance UI/UX, such as 3D and hover CSS effects.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published