Discover, track and share books!
A full-stack web app with personalized recommendations, reading analytics, and book clubs
Table of Contents
The database is hosted on Supabase via PostgresSQL.
To set up the database, you will first need to create a blank database on Supabase and enter your API credentials in .env
in the root of the repository.
It will have the following format:
user=...
password=...
host=...
port=...
dbname=...
Then, set up a virtual environment in the backend
cd backend
python -m venv venv/
source venv/bin/activate
pip install -r requirements.txt
If you want to initialize the database, run ./setup.sh
in the root directory after setting up the virtual environment.
This is the script that initializes the database schemas and loads sample data into them.
Then you should be able to run any SQL query with python runSQL.py [name-of-sql-file].sql
and see the output on the terminal.
To run the app locally, do the following after the DB setup has been done:
cd backend
source venv/bin/activate # if you are using a virtual env
python backend.py # use python3 instead if you have an older python version installed
This command starts the Flask development server with API endpoints
cd frontend
npm install
npm run dev
The application supports the following features (linked to SQL queries in queries/milestone3/
):
- Search for books by title (R6)
- Add books to a wishlist (R7)
- View common books between two users (R8)
- View top 5 highest-rated books (R9)
- View top 5 most wishlisted books (R10)
- Tag-Based Book Recommendations (R11): Suggests books based on tags you frequently use, by finding other readers with similar preferences.
- Finding Book Clubs Based on Genre (R12): Recommends book clubs that align with your reading history.
- Book Completion Rate (R13): Displays how many readers finish a book after starting it—useful for picking engaging reads.
- Concurrent Club Join Limit (R14): Trigger to ensure fairness when multiple users try to join the last available slot in a book club.
- Reading Streak (R15): Tracks consecutive reading days to keep you motivated.
- Frontend: React with TypeScript
- Backend: Python (Flask REST API, Psycopg2 for PostgreSQL integration)
- Database: PostgreSQL (hosted on Supabase)
Name | GitHub |
---|---|
Arjun | asterbot |
Skylar | Skylarrji |
Serena | xuserena12 |
Gary | garysu92 |
Thanh | lvthanh03 |