PERSONAL READING LIBRARY

Bookshelf

/ organize your reading journey
✓ Completed — 2026

Bookshelf

Full Stack application for managing a personal reading list, allowing users to add books, track reading progress, and record ratings.

Next.js 16React 19TypeScriptTailwind CSS 4shadcn/uiReact Hook FormZod 4AxiosNestJS 12FastifyPrisma 7PostgreSQL 18Docker Compose

✦ 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.

Next.js → Service Layer → Axios → NestJS Controller → Service → Repository → Prisma → PostgreSQL

✦ 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.