Week #6

Week #6 #

Final deliverables #

Project overview #


Our project is a personalized book recommendation platform that helps users discover new books based on their reading history and preferences. It addresses a common problem for both avid and occasional readers: the time-consuming and sometimes discouraging process of choosing the next book to read.

For frequent readers, the system reduces decision fatigue by offering tailored recommendations, allowing them to spend more time reading and less time searching — an important benefit, as they make such choices often and therefore spend a significant amount of time on this task overall. For occasional readers, it lowers the barrier to engagement by simplifying the book selection process, encouraging more consistent reading habits.

The recommendations are based on user-provided ratings (1–5 stars), ensuring relevance and accuracy. Additionally, users can leave comments on books, enabling others to quickly gauge community opinions and make informed decisions about recommended books. Our platform also features a weekly trending list and a Top Books chart, which appeal to users who want to stay current with popular titles and participate in broader conversations on social media and in reading communities.

To support personal tracking, the platform includes a reading list management system with three categories: Already Read, In Progress, and Planned.


Features #

List of all implemented features in your project.

  • Personalized book recommendations
  • Reading list management (Already read/In progress/Planned)
  • 1-5 star rating system
  • Comments on books
  • Weekly trending books
  • Books Top

Tech stack #

ComponentTechnology
BackendFastAPI
FrontendJinja2 + HTML + CSS + JS
AuthKeycloak + LDAP
OrchestrationAirflow
Transactional DBPostgreSQL
Analytical DBClickHouse
InfrastructureDocker/Kubernetes

Setup instructions #

1. Clone the repository #

git clone https://github.com/IU-Capstone-Project-2025/Recommendation-System.git
cd Recommendation-System

2. Prepare environment configuration #

Rename the example environment file:

cp .env.example .env

3. Start Keycloak and LDAP (manual step) #

  • The official Keycloak and LDAP containers are run simultaneously via Docker using official guides, and are manually synchronized via user interfaces.

4. Build and run project components using Docker Compose #

docker compose up --build -d tester

Alternatively, you may use Kubernetes for orchestration


5. Access the application #

Access Points #

EnvironmentServiceURLCredentials
LocalWeb UIhttp://localhost:8000-
LocalAirflowhttp://localhost:8080admin/admin
LocalKeycloakhttp://localhost:8081admin/admin
LocalPostgres (backend)http://localhost:5432admin/admin
LocalPostgres (airflow)http://localhost:5433admin/admin
LocalClickhouse (HTTP connection)http://localhost:8124admin/admin
LocalClickhouse (TCP connection)http://localhost:9001admin/admin
ProductionLive Sitehttps://capstone2.cybertoad.ru-
ProductionAuthentication serviseshttps://capstone.cybertoad.ru-

Presentation draft #

Link to Presentation draft in Figma

Bonus #

Deployment #

Our service accessible at: https://capstone2.cybertoad.ru

We deployed the frontend, backend, data engineering pipeline, and databases on a server.

There is also a second server that hosts the authentication system. This was done to avoid compromising user data by fully copying and decoding data from RAM.

Everything is orchestrated using Docker Compose. The web server is Nginx, which forwards the traffic to the containers, where it is processed and sent back.

Weekly commitments #

Individual contribution of each participant #

  • Denis Troegubov:

    • Added comments and fix problem with data overflow Link to PR
  • Timur Garifullin:

    • Fixed catalog error when ClickHouse is down Link to PR
    • Fixed status drop, added button to drop rating Link to PR
    • Converted usernames to lowercase to prevent LDAP issues Link to PR
    • Applied a 404 error template Link to PR
  • Grigorii Belyaev:

    • Improved mobile search input and fixed minor UI issues on the home page (duplicate sign-in button) Link to PR
    • Unified status case and fix comment word-break Link to PR
    • Hided 3D model and adapt auth pages for mobile Link to PR
  • Peter Zavadskii:

    • Documented the endpoints in Swagger Link to PR
    • Tested two search approaches: one based on machine learning and one using an algorithm.

    We decided to go with the algorithmic approach, as the ML-based solution requires too many resources and our server cannot handle it efficiently.

    • Checked the ML-based approach Link to PR
    • Restored the Levenshtein distance algorithm for search Link to PR
  • Adelina Karavaeva:

    • Report
    • Created presentation Link to Figma
    • Renamed inconsistent “Sign in” text to “Log in” across the UI for clarity and consistency. Added an animated SVG avatar to the user profile Link to PR
    • Updated design document to be up to date with final project Link to Figma

Plan for Next Week #

Next week we plan to:

  • Do a final walkthrough of the website to ensure everything works as expected.

  • Complete and polish the final version of the presentation slides.

  • Rehearse the full presentation

Confirmation of the code’s operability #

We confirm that the code in the main branch:

  • In working condition.