Django-based book catalog and personal library platform powered by the Open Library API.
Users can browse books by genre, search by title, author or ISBN, add books to their personal library, track reading status, and leave reviews.
- Book catalog with pagination and grid / list view toggle
- Search by title, author, or ISBN with on-demand Open Library import
- Personal library
- Book rating
- Book reviews
- User profiles
- Filter sidebar
- Social authentication via Google and Facebook
- Email verification and reCAPTCHA v2
- Python 3.13 / Django 6.0
- Docker
- NGINX
- PostgreSQL 16
- SCSS / JavaScript
- django-allauth, django-recaptcha
- httpx
BookShelf-Pro
├── backend
│ ├── config # settings, urls, wsgi
│ ├── apps # all django apps
│ │ ├── books # catalog, search, Open Library integration
│ │ │ └── services
│ │ │ ├── activity.py, catalog.py, client.py
│ │ │ ├── detail.py, importers.py, rating.py
│ │ │ └── subject_map.py
│ │ ├── library # personal library, UserBook, status management
│ │ ├── users # user model, profile, RecentActivity
│ │ └── main
│ ├── templates
│ ├── fixtures # data for categories
│ ├── static
│ ├── utils
│ ├── tests
│ ├── .env # for dev
│ └── Dockerfile
├── requirements.txt
├── .env # for compose
├── docker-compose.yml
└── README.md
Clone the repository and set up the environment:
git clone https://github.com/kapusta123b/BookShelf-Pro.git
cd BookShelf-Pro
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activateInstall dependencies:
pip install -r --no-cache-dir requirements.txtInstall PostgreSQL, create a user and a database, https://www.postgresql.org/download/, and then replace the values in the backend/.env file with your own.
SECRET_KEY=your_secret_key
DEBUG=True # True only for dev, else False
ALLOWED_HOSTS=127.0.0.1,localhost
CSRF_TRUSTED_ORIGINS=http://127.0.0.1,http://localhost
DB_NAME=your_db_name
DB_USER=your_db_user
DB_PASS=your_db_password
DB_HOST=localhost
DB_PORT=5432Apply migrations and run development server:
cd backend
python manage.py migrate # important !
python manage.py loaddata backend/fixtures/books/subjects.json
python manage.py runserverCreate admin user ( optional ):
python manage.py createsuperuserSite is available at http://localhost:8000
Admin panel available at http://localhost:8000/admin/
Install Docker: https://docs.docker.com/engine/install/
Clone the repository:
git clone https://github.com/kapusta123b/VotingSite.git
cd VotingSiteEdit environment variables:
nano .envUpdate Nginx server name:
nano conf.d/nginx.confBuild and start containers:
docker compose up -d --buildApply migrations:
docker exec web python manage.py migrateLoad categories data:
docker exec web python manage.py loaddata backend/fixtures/books/subjects.jsonCreate admin user ( optional ):
docker exec web python manage.py createsuperuserBefore deployment, update:
.env- Nginx
server_name - OAuth credentials
Do not commit real secrets or production credentials to the repository.
Create OAuth apps in Google Cloud Console and Facebook Developers, then add providers in Django Admin under Social Accounts → Social Applications.
Callback URLs:
http://your_domain/accounts/google/login/callback/
http://your_domain/accounts/facebook/login/callback/
MIT