Home

Awesome

BooksList

A simple, responsive, JS-based (Node.js / Front-End / Database) project focused on using modern browser APIs to achieve great results with minimal effort.

Requirements

Node.js is required in order to build and run the application. Preferred 6.x.x version. You can download Node.js from https://nodejs.org/en/

Setup

Setup - More Options

Generate Your Own Data

The alternative to downloading data is to generate it yourself. Try the following:

Technological Choices

To make things simple and self-contained thus easy to setup, the application is fully JavaScript based including the server, the client as well as the database.

Errors handling

Since the application is API based, most of the potential errors during development might come from the API requests. The convention used in this application is to return a simple JSON object with the error status and hide details from most of the users.

JSON Error Response

For development purposes though, you can inspect error details in HTTP X-Error-Details header, see:

HTTP Header Containing API error details

Presentation

Business Requirements:

Book Tiles

Book Tile - No Indication

Book Tile - No Indication

Book Tile - Halloween Special

Book Tile - Halloween Special

Book Tile - Financial Special

Book Tile - Financial Special

Filters

Filters - All

All Filters

Filters - Genre Filter

Genre Filter

Filters - Gender Filter

Gender Filter

Filters - Sorting Options

Sorting Options

Responsiveness: Mobile-First

Responsiveness: Mobile-First

Performance: Lazy Loading

Performance: Lazy Loading

Going into production

Here are some things worth checking before going live with an application:

The list of potential improvements is much longer, it might consist of typed javascript to make your code more bulletproof, service workers to make your app work at least partially offline, web workers to offload some work and process it in the background, using jsdom to potentially pre-render loaded app state rather than empty one, introducing more sophisticated routing so the app can load with pre-selected filters when loaded from bookmarks, better error-handling so that the app re-tries to request data again whenever the API failed or went down and plenty more.

Additional Questions

Please feel free to raise any questions with me either using issues or reach directly me on twitter @maciejsmolinski