Web application to manage, organize, and share academic books
Explore the repository Β»
Report Bug
Β·
Request Feature
Table of Contents
Bookify is an early-stage MVP (Minimum Viable Product) created to showcase my skills as a fullstack web developer. Rather than being presented as a production-ready platform, this project serves as a technical demonstration of how a virtual library system could be designed, structured, and implemented using modern web technologies.
The focus of this MVP is on:
- Designing a clean and scalable frontend architecture
- Implementing server-side logic and data handling
- Integrating third-party services (storage, database, APIs)
- Applying best practices in TypeScript, state management, and validation
This repository represents a solid foundation for a potential virtual library platform, while primarily acting as a portfolio project that highlights my ability to build, structure, and reason about fullstack applications.
Bookify/
βββ .github/ # GitHub configuration (CI, templates, ownership)
β βββ workflows/ # GitHub Actions (ESLint, checks)
βββ public/ # Static assets (images, icons, logos)
βββ src/
β βββ app/ # Next.js App Router
β β βββ (main)/ # Main application routes
β β β βββ components/ # Page-specific UI components
β β β βββ saved-books/# Folder & book management views
β β βββ share-books/ # Book sharing flow
β βββ components/ # Global reusable components
β β βββ common/ # Shared UI elements (BookItem, Header, Modals)
β β βββ icons/ # Custom SVG icon components
β βββ context/ # Global state management (Folder context)
β βββ hooks/ # Custom React hooks
β βββ models/ # Data layer (IndexedDB, Prisma, business logic)
β βββ interfaces/ # TypeScript interfaces and domain models
β βββ providers/ # Global providers (UI, theme, etc.)
β βββ styles/ # Global styles and third-party CSS
β βββ utils/ # Utility and helper functions
βββ prisma/ # Prisma schema and migrations
βββ tailwind.config.ts # Tailwind CSS configuration
βββ next.config.ts # Next.js configuration
βββ tsconfig.json # TypeScript configuration
This structure follows modern Next.js App Router conventions, separating concerns between routing, UI components, business logic, and data access. The project is designed to scale while remaining easy to maintain and extend.
This project is built using a modern fullstack JavaScript ecosystem:
- Next.js β Fullstack React framework using the App Router
- React β Component-based UI library
- TypeScript β Strong typing and improved developer experience
- Prisma β Database ORM and schema management
- Tailwind CSS β Utility-first styling
- TanStack Query β Server-state management
- Supabase β Authentication and backend services
- Cloudflare R2 (S3-compatible) β Object storage for files
- Zod β Schema validation and type-safe forms
Follow these steps to set up the project locally for development.
Make sure you have the following installed:
- Node.js (v18 or later recommended)
- npm or pnpm
- Git
If you plan to use the database features:
- A supported database (configured via Prisma)
-
Clone the repository
git clone https://github.com/Mauriciocr207/Bookify.git
-
Navigate to the project directory
cd Bookify -
Install dependencies
npm install
-
Set up environment variables (see next section)
-
Run the development server
npm run dev
The application will be available at http://localhost:3000.
Create a .env file in the root of the project and define the following variables:
# Cloudflare R2 (S3-compatible storage)
R2_ACCOUNT_ID=""
R2_ACCESS_KEY_ID=""
R2_SECRET_ACCESS_KEY=""
R2_BUCKET_NAME=""
R2_DEV_URL=""
# MODE
# MODE="dev"
# Supabase
SUPABASE_URL=""
SUPABASE_ANON_KEY=""
# Database (Prisma)
DATABASE_URL=""
DIRECT_URL=""
DATABASE_PASS=""The required variables depend on the features you enable (storage, database, authentication). Make sure to restart the development server after modifying environment variables.
The following scripts are available via npm run:
devβ Runs the app in development mode with Turbopackbuildβ Builds the application for productionstartβ Starts the production serverlintβ Runs ESLintprisma:pullβ Pulls the database schemaprisma:generateβ Generates Prisma clientprisma:migrateβ Runs database migrationsprisma:seedβ Seeds the database
β οΈ This project is an MVP intended for demonstration and portfolio purposes.
It is not designed to be production-ready without further security, scalability, and performance considerations.
Mauricio Carrillo linkedin.com/in/enrique-carrillo-romero π§ enrique.mauricio.carrillo.romero@gmail.com
Project Link: https://github.com/Mauriciocr207/Bookify