A modern book discovery and reading list management web app built with React and Firebase. Browse books, save your favorites, track your reading progress, and explore curated blog posts — all in one place.
| Home | Book Detail | Pages to Read |
|---|---|---|
![]() |
![]() |
![]() |
- 🔍 Book Discovery — Browse books powered by the Google Books API
- 🎯 Genre Filtering — Filter books by genre with smart pagination
- 📖 Reading List — Save books and manage your personal reading list
🔐 Auth Required - 📊 Reading Status — Track books as "Want to Read", "Reading", or
"Finished"
🔐 Auth Required - 📈 Pages Chart — Visual bar chart of your saved books' page counts
- 🔐 Authentication — Sign in with Google or Email/Password via Firebase Auth
- 🌙 Dark / Light Mode — Toggle between themes, preference saved in localStorage
- 👤 User Profile — Update display name and photo, delete account
- 🛡️ Protected Routes — Listed Books and Pages to Read require sign in
- 📱 Fully Responsive — Optimized for mobile, tablet, and desktop
- 📝 Blog — Curated reading tips and book recommendations
- 🔎 Search — Search for any book by title, author, or keyword
- 💬 Contact Form — Get in touch via the contact page
| Category | Technology |
|---|---|
| Frontend | React 19, Vite 8 |
| Styling | Tailwind CSS 4, Framer Motion |
| UI Components | shadcn/ui, Lucide React |
| Authentication | Firebase Auth (Google + Email) |
| Database | Cloud Firestore |
| Data Fetching | TanStack Query (React Query) |
| HTTP Client | Axios |
| Book Data | Google Books API |
| Charts | Recharts |
| Notifications | Sonner |
| Routing | React Router DOM v7 |
| Deployment | Netlify |
src/
├── components/ # Reusable UI components
│ ├── ui/ # shadcn/ui base components
│ ├── BookCard.jsx
│ ├── BookList.jsx
│ ├── Navbar.jsx
│ └── ...
├── context/ # React Context providers
│ ├── AuthContext.jsx # Firebase auth state
│ └── ListedBooksContext.jsx # Reading list state
├── hooks/ # Custom React hooks
│ ├── useAuth.js
│ └── useBooks.js
├── pages/ # Route-level components
│ ├── Home.jsx
│ ├── BookDetail.jsx
│ ├── ListedBooks.jsx
│ ├── PagesToRead.jsx
│ ├── Profile.jsx
│ ├── Search.jsx
│ ├── Blog.jsx
│ ├── SignIn.jsx
│ ├── SignUp.jsx
│ └── ...
├── firebase/
│ └── firebase.js # Firebase config & exports
├── router/
│ └── index.jsx # Route definitions
├── data/
│ └── blogPosts.js # Static blog data
└── layouts/
└── RootLayout.jsx # Shared layout with Navbar & Footer
- Node.js 18+
- A Firebase project
- A Google Books API key
git clone https://github.com/Shawon-Mahmud07/Book-Vibe.git
cd book-vibenpm installCreate a .env file in the root directory:
VITE_GOOGLE_BOOKS_API_KEY=your_google_books_api_key
VITE_FIREBASE_API_KEY=your_firebase_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project.firebasestorage.app
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_idEnable Authentication:
- Go to Firebase Console → Authentication → Sign-in method
- Enable Google and Email/Password
Set Firestore Security Rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null
&& request.auth.uid == userId;
}
}
}npm run devOpen http://localhost:5173 in your browser.
npm run buildOutput will be in the dist/ folder.
This project includes a netlify.toml for automatic SPA routing.
Option 1 — Drag & Drop:
- Run
npm run build - Drag the
dist/folder to netlify.com/drop
Option 2 — GitHub Integration:
- Push your code to GitHub
- Connect the repo in Netlify dashboard
- Set build command:
npm run build - Set publish directory:
dist - Add all environment variables under Site Settings → Environment Variables
The following routes require authentication:
| Route | Description |
|---|---|
/listed-books |
Your saved reading list |
/pages-to-read |
Reading progress tracker |
Unauthenticated users are redirected to /signin and returned to their intended
page after login.
This project is open source and available under the MIT License.
- Google Books API for book data
- Firebase for auth and database
- shadcn/ui for UI components
- Framer Motion for animations


