DEV Community

Cover image for Quotlify, a React/Redux example project
Douglas Minnaar
Douglas Minnaar

Posted on

Quotlify, a React/Redux example project

Summary

This is a followup on a previous post where I presented 11 React projects to help those getting started with React programming. In this post I present the 12th project in the series, and is called 'Quotlify'.

Quotlify is a quote browser and manager that allows one to search famous quotes and save them to a data store. The application is built using React, Redux for application state, and React Router for pages and navigation, and Firebase for a datastore.

Features

  • Display quote of the day (QOD)
  • Search for quotes
  • Save quotes as favorites
  • Remove favorite quotes

Links

  • Find the live demo here

  • Find the project on Github here

  • Find the previous post here

Key Takeaways

This project also demonstrates:

  • A typical React project layout structure
  • Babel setup and configuration
  • Webpack setup and configuration
    • dotenv setup included
  • Eslint setup and configuration
  • SCSS setup and configuration
  • Configuring and using Redux to manage application state
  • Configuring React Router and setting up pages and navigation
  • FavQs API integration
  • Firebase integration

Project Overview

At a high level, Quotlify is a Single Page Application (SPA) built using notable libraries like React, React Router, and Redux. The application gets quote data from a third party API (FavQs). It allows one to add/remove a quote as a favorite to/from a database (Firebase). All API and database interaction is managed through domain services. The following diagram illustrates the general design of the application.

Application Design

quotlify-app-design

Primary Components

The root application component (App), is composed of 4 primary components:

  • Header
    • A heading that displays application title
  • Quote Of The Day (QOD) Page
    • The "landing page" or the first view that the application opens on. It displays a random quote of the day that it retrieves from a third party API (FavQs)
  • Quotes Page
    • A search page and is used to search for famous quotes by querying the FavQs API
  • Favorite Quotes Page
    • Displays a list of all favorite quotes that were added via the application. The favorite quote data is managed via a Firebase database

The "page" components are configured to use React Router for display and navigation.

Primary Component Design

primary-component-design

Quote Of The Day Page

This is the first view that is displayed upon loading the application. It displays a random quote of the day. There is a button to favorite a quote. There is also a button to refresh and retrieve a new random quote of the day.

Quote Of The Day Page Design

quotlify-qod-component

Quotes Page

This view is responsible for providing quote search capability. The search functionality is provided through a SearchBar component. The results of a search are displayed as a list of cards containing, each containing a single quote and a 'favorite' button.

Quotes Design

quotlify-quotes-component

Favorite Quotes Page

Displays a list of favorite quotes . Each quote is displayed in a card with a 'remove quote' button.

Favorite Quotes Design

quotlify-favquotes-component


Developed With

  • Visual Studio Code - A source code editor developed by Microsoft for Windows, Linux and macOS. It includes support for debugging, embedded Git control, syntax highlighting, intelligent code completion, snippets, and code refactoring
  • Node.js - Javascript runtime
  • React - A javascript library for building user interfaces
  • React Router - Declarative routing for React
  • Redux - Redux is a predictable state container for JavaScript apps.
  • Redux-Promise-Middleware - Redux middleware for promises, async functions and conditional optimistic updates
  • Redux-Thunk - Thunk middleware for Redux
  • Babel - A transpiler for javascript
  • Webpack - A module bundler
  • SCSS - A css metalanguage
  • Bootstrap 4 - Bootstrap is an open source toolkit for developing with HTML, CSS, and JS
  • Axios - Promise based HTTP client for the browser and node.js
  • FavQs Api - Provides quote data
  • Firebase - Provides database as a service
  • Surge - Static web publishing for Front-End Developers

It should be noted that I have used Redux-Promise-Middleware and Redux-Thunk libraries as middleware to handle asynchronous operations like fetching and persisting data. The reason why I am using both is due to performing chained asynchronous operations. If you don't require chaining, then I recommend only using Redux-Promise-Middleware. I have chosen not to use Redux Saga because I consider it "next level". However I do believe that once you grok it, then it actually simplifies things a lot. It will make for a good followup project.


Showcase

  • Find the live demo here

  • Find the project on Github here

Screenshots

quotlify-screenshot-1


quotlify-screenshot-2


quotlify-screenshot-3


Conclusion

There are a few things that I would like to improve on this project like:

  • Introduce paging on search
  • Add more advanced search functionality
  • Bring in quote tags and use them to help with filtering
  • I would like to improve on the way I have done async chaining for the 'add to favorite quotes' functionality
  • Add authentication and authorization to allow for different users to signin and manage quotes

Lastly, I would like to branch off this project and use Redux-Saga as middleware to manage asynchronous functions

Top comments (5)

Collapse
 
algadug profile image
AL-GaDuG

Great! inspirational project

Collapse
 
drminnaar profile image
Douglas Minnaar

Awesome! Thanks.

Collapse
 
yohannesayele profile image
Yohannes

Very nice project to start React-Redux

Collapse
 
jvarness profile image
Jake Varness

Wow, this is really cool stuff! This is some great code to look at if you want to get started with React!

Collapse
 
drminnaar profile image
Douglas Minnaar

Thanks Jake! I'm glad you found it useful.