A personal library management app built for book lovers. Track your books, write reviews, discover reading habits, and manage your collection — in both Bengali and English.
- Add books manually, by ISBN lookup, or by title/author search
- Barcode scanner using device camera to scan ISBN barcodes
- Track 200+ books with full details — title, author, publisher, year, edition, ISBN
- Support for Bengali (বাংলা) and English books with proper font rendering
- Organize into custom shelves / collections
- Track reading progress page by page with a visual progress bar
- Log reading sessions — "I read 30 pages today" — with daily pace chart
- Set a yearly reading goal with a progress tracker on the dashboard
- Mark books as To Read / Reading / Finished / Paused / Dropped
- Write full-text reviews in Bengali or English
- 5-star rating system per book and per story
- Add free-form tags (e.g. favorite, gift, reread)
- Multiple genres per book
- Wishlist for books you want to buy or borrow
- Stories / Parts tracker for collected works and omnibus editions (e.g. Complete Sherlock Holmes)
- Reading habit charts — genre breakdown, language split, rating distribution
- Book recommendations based on your reading history and top-rated genres
- Track reading pace over time with session charts
- Share a book review via public link — no sign-in required for viewers
- Export library as CSV — open in Excel or Google Sheets
- Export library as PDF — formatted, printable document
- Print library list — clean printable view with summary stats
- Dark mode — toggleable, preference saved across sessions
- Progressive Web App (PWA) — install on Android or iPhone like a native app
- Works on desktop, tablet, and mobile
- All data private and synced across devices via Firebase
| Library | Book Detail | Analytics |
|---|---|---|
| Book grid with real covers | Progress, reviews, sessions | Reading habit charts |
| Layer | Technology |
|---|---|
| Frontend | React 18 (Create React App) |
| Database | Firebase Firestore |
| Authentication | Firebase Auth (Google + Email/Password) |
| Hosting | Netlify |
| Barcode scanning | @zxing/library |
| PDF export | jsPDF |
| Book data | Open Library API (free, no key needed) |
| Fonts | Google Fonts — Playfair Display, DM Sans, Noto Serif Bengali |
- Node.js 16+
- A free Firebase account
git clone https://github.com/JobayerFaisal/BookSphere.git
cd BookSpherenpm install- Go to Firebase Console → Create a new project
- Enable Authentication → Sign-in methods → Enable Google and Email/Password
- Enable Firestore Database → Start in production mode → Region:
asia-south1 - Register a Web app → copy the config values
Create a .env file in the project root:
REACT_APP_FIREBASE_API_KEY=your_api_key
REACT_APP_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
REACT_APP_FIREBASE_PROJECT_ID=your_project_id
REACT_APP_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
REACT_APP_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
REACT_APP_FIREBASE_APP_ID=your_app_idIn Firebase Console → Firestore → Rules:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/{document=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
match /shares/{shareId} {
allow read: if true;
allow write: if request.auth != null && request.auth.uid == resource.data.uid;
allow create: if request.auth != null && request.auth.uid == request.resource.data.uid;
}
}
}
npm startOpen http://localhost:3000 in your browser.
npm run build- Push your code to GitHub
- Go to Netlify → Import from GitHub → Select this repo
- Build settings are auto-detected from
netlify.toml - Add your Firebase environment variables in Netlify → Site configuration → Environment variables
- Add your Netlify URL to Firebase Auth → Authorized domains
See DEPLOY.md for detailed deployment instructions.
Android: Open the live URL in Chrome → tap ⋮ menu → "Add to Home screen"
iPhone: Open the live URL in Safari → tap Share → "Add to Home Screen"
src/
├── components/
│ ├── BookCard.js # Book grid card with cover image
│ ├── ExportModal.js # CSV / PDF export
│ ├── Layout.js # Sidebar navigation, dark mode toggle
│ ├── PrintView.js # Printable library list
│ └── StoriesTracker.js # Sub-book tracker for series/omnibus
├── context/
│ └── ThemeContext.js # Dark mode state
├── pages/
│ ├── AddBook.js # Add/edit form with ISBN & title search
│ ├── Analytics.js # Reading habit charts
│ ├── BookDetail.js # Full book page with sessions & stories
│ ├── Library.js # Main book grid with goal tracker
│ ├── Login.js # Auth — Google + email/password
│ ├── Recommendations.js # Personalized book suggestions
│ ├── ShareView.js # Public share page (no login needed)
│ ├── Shelves.js # Shelf browser
│ └── Wishlist.js # Wishlist page
├── services/
│ ├── books.js # Firestore CRUD for books
│ ├── export.js # CSV and PDF export logic
│ ├── sessions.js # Reading session tracking
│ ├── share.js # Public share link service
│ └── stories.js # Stories/parts tracker service
└── firebase.js # Firebase initialization
This is a personal project, but suggestions and improvements are welcome.
- Fork the repo
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
Distributed under the Apache 2.0 License. See LICENSE for more information.
Built with ❤️ by Jobayer Faisal