Bookshelf
/ organize your reading journeyBookshelf
Full Stack application for managing a personal reading list, allowing users to add books, track reading progress, and record ratings.
✦ The Problem
Keeping a reading list organized can become challenging as new books are added. Bookshelf centralizes this management in a single application, allowing users to track reading status and keep book information organized.
✦ What is Bookshelf
A Full Stack application composed of two independent applications: a frontend built with Next.js and a REST API developed with NestJS. It allows users to manage a personal book collection through creation, retrieval, updating, and deletion operations.
✦ Project Goal
The project was developed to deepen frontend development knowledge, particularly with React and Next.js, while gaining practical experience integrating independent applications. It also involved working with HTTP communication, form management, data validation, and frontend-backend integration.
✦ Features
- ▸Create, list, update, and delete books
- ▸Register book titles, authors, reading status, and ratings
- ▸Filter books by reading status through URL parameters
- ▸Reusable form for creating and editing books
- ▸Confirmation before deleting a book
- ▸Loading states and error handling in book listings
- ▸Data validation with Zod on both frontend and backend
- ▸Interactive API documentation with OpenAPI and Scalar
✦ Frontend
Built with Next.js 16, React 19, and TypeScript, using the App Router for page organization. The interface uses Tailwind CSS and shadcn/ui components. Forms are managed with React Hook Form and validated with Zod. HTTP requests are centralized in a service layer using Axios.
✦ Backend
REST API developed with NestJS 12 and Fastify, using PostgreSQL for persistence and Prisma for database access. The application is organized by domain modules and uses the Repository Pattern to separate business logic from persistence implementation. Data validation is handled by Zod integrated with NestJS StandardSchemaValidationPipe.
✦ Main Endpoints
The API provides CRUD operations for book management, as well as filtering capabilities based on reading status.
Books
POST /books · GET /books · GET /books/:id · PATCH /books/:id · DELETE /books/:id
Filtering
GET /books?status=WANT_TO_READ (or READING or READ)
✦ Architecture
The frontend and API are independent applications. The frontend uses a service layer to centralize HTTP requests, while the backend organizes responsibilities by module and uses the Repository Pattern to decouple services from persistence.
✦ Current Scope
The project does not implement authentication or authorization. The book listing does not include pagination, and automated tests specific to the book module have not yet been implemented. Therefore, the application should not be used in a public environment with data requiring access control until the necessary security measures are implemented.