Skip to content

Latest commit

 

History

History
117 lines (75 loc) · 2.24 KB

README.md

File metadata and controls

117 lines (75 loc) · 2.24 KB

NovelNook

Screenshots

This is an online bookstore application with the following features:

  • Browsing books
  • Searching books by
    • title
    • description
  • View book details
  • Browing authors
  • Searching authors by
    • name
    • bio
  • Login/Signup
  • Favoriting books
  • Managing favorites

Technologies in this Project

Frontend

  • NextJS
  • Tailwind CSS

Backend

  • NextJS, Server Actions
  • Prisma
  • Postgres

Tooling

  • Docker Compose
  • Jest

App Layout

This app has the following routes:

  • /
  • /auth
    • /auth/login
    • /auth/signup
  • /authors
    • /authors/[id]
  • /books
    • /books/[id]
  • /favorites

More details here

Setup and Running Instructions

Docker compose for containerization and easy project setup.

  1. Clone the repository:
git clone https://github.com/zthh626/novel-nook.git
cd novel-nook
  1. Setup environment variables:

Modify the .env file in the root directory. SECRET_KEY is the key used for signing the JWT key change this to some secret key for security purposes. DATABASE_URL is pointed to the docker-compose PostgreSQL instance.

  1. Install node modules with npm install

  2. Run the application with docker-compose:

docker-compose up
  1. Migrate the database with npx prisma db push

  2. Seed the database with npx prisma db seed

This command uses the DATABASE_URL in the .env file. The mock data for this seed is located at authors.json and books.json.

  1. Access the application at http://localhost:3000/

Testing

Currently, only unit tests for auth

  1. Run npm run test

Database

The database schema has the following 4 tables:

  • Users
  • Favorites
  • Books
  • Authors

For a deeper explanation view database.md.

Design Decisions

design-decisions.md

Authentication

authentication.md

lib functions

/src/lib

TODO

  • Misnamed favourites in database schema but everything else is called favorites.
  • SearchInput has quick search half implemented, the feature will have a short list of search results as the user typed.