Create a web application that allows users to browse, search, and review books. The application should have a user-friendly interface and a backend API to handle data storage and retrieval.
- Create a responsive user interface using HTML, CSS, and a JavaScript framework (e.g., React, Angular, or Next.js).
- Implement a book listing page that displays a grid of book covers along with their titles and authors.
- Create a search bar that allows users to search for books by title, author, or genre.
- Implement a book details page that displays the book's title, author, description, average rating, and user reviews.
- Allow users to submit their own reviews for a book, including a rating (e.g., 1-5 stars) and a comment.
- Implement client-side form validation for the review submission.
- Create a RESTful API using a server-side language/framework (e.g., Node.js with Express or Nextjs, Python with Django or Flask etc).
- Design and implement a database schema to store book information and user reviews (e.g., using MySQL, PostgreSQL, or MongoDB). Define the DDL, migrations of the schema, if not, provide an ER Diagram.
- Create API endpoints for retrieving book listings, searching for books, retrieving book details, and submitting user reviews.
- Implement server-side validation for the review submission endpoint.
- Implement pagination for the book listing and search results.
- Allow users to sort books by various criteria (e.g., title, author, average rating).
- Implement user registration and login functionality.
- Add a feature to allow users to mark books as favorites.
- Code quality, readability, and organization.
- Proper separation of concerns between the front-end and back-end.
- Proper use of version control (e.g., Git) and clear commit messages.
- Proper handling of edge cases and error scenarios.
- Efficiency of database queries and API responses.
- User experience and responsiveness of the interface.
- Bonus points for implementing additional features or writing unit tests.
- Create a git repository on your choice of SCM platform (github, gitlab, bitbucket etc)
- Provide crisp and clear instructions to run the code.
- Try to use an online DB so that DB setup is not required on Evaluator's machine.
- Hosting the application would accelerate the evaluation process but it is optional.