Week #2

Week #2 #

Detailed Requirements Elaboration #

After revising the user stories, we decided to keep almost all of them in the MVP scope. One user story was removed from the MVP (As a user, I want to see brief descriptions of recommended books so I can quickly understand if the book suits me) — we chose to keep only the author, title, and cover for now and plan to expand it with descriptions in the final product.

User stories #

  • As a user, I want to receive a list of recommended books that match my interests based on past ratings so I can quickly decide what to read.

  • As a user, I want to rate a book I’ve read so that the system can better understand my preferences.

  • As a user, I want to maintain a personal reading list (Read, Reading, Planned) so I can organize my reading journey.

  • As a user, I want to leave and read comments on books so I can share opinions and discover what others think.

  • As an author, I want to see aggregated feedback (ratings and comments) on my books so I can understand reader reception.

  • As an author, I want to view the “Most Popular This Week” list so I can understand current reader interests and trends to better align my future writing.

Acceptance Criteria for Key User Stories #

  1. As a user, I want to receive a list of recommended books that match my interests based on past ratings. At least 5 book recommendations are displayed.
  • Recommendations are updated after the user rates new books.

  • Each recommended book includes a title, author, and cover.

  • Only books not already in the user’s reading list are shown.

  1. As a user, I want to rate a book I’ve read so that the system can better understand my preferences.
  • Rating is possible with one click (e.g. 1–5 stars or thumbs up/down).

  • Rated books are saved in the user’s profile.

  • The system updates recommendations after rating is submitted.

  • The same book cannot be rated multiple times.

  1. As a user, I want to maintain a personal reading list (Read, Reading, Planned).
  • User can assign each book to one of the three statuses.

  • Books can be moved between statuses.

  • The reading list persists between sessions.

  • A book cannot belong to more than one status at the same time.

  1. As a user, I want to leave and read comments on books.
  • Any user can leave a comment on a book they have rated or marked as “Read”.

  • Comments display the username and timestamp.

  • Users can read comments left by others on a book’s detail page.

  • Comments are sorted by newest first.

  1. As an author, I want to see aggregated feedback (ratings and comments) on my books.
  • Author can view average rating per book.

  • Author sees total number of ratings and comments.

  • Author can read all public comments on their books.

  1. As an author, I want to view the “Most Popular This Week” list.
  • List updates weekly.

  • List includes top 10 books with the highest interaction (reads, ratings, comments).

Prioritized backlog #

Backlog Screenshot

TaskStatusDeadlinePriority
Database schema design & data ingestionDoneJun 18High
Docker compose for airflowDoneJun 18High
Create initial design for core pages inDoneJun 18High
Book listing & sorting (Top Rated, Most Popular, Trending, …)To DoJun 25High
User feedback featuresTo DoJun 25High
Mobile optimization for webTo DoJun 25Low
Develop basic user flow diagrams for key interactionsDoneJun 18High
DevOps and deployment (Containerization/Orchestration + Nginx + CI/CD)To DoJun 25High
Scrape data from sites with book datasetsTo DoJun 25Medium

Project specific progress #

Frontend #

We set up the basic web interface using FastAPI with Jinja2 templates and implemented skeleton pages based on initial designs. During the development process, we added an interactive title page with 3d model to the original idea.

Backend #

We initialized the FastAPI application and implemented initial API routes for user and book data. The backend is integrated with Jinja2 for page rendering. Core modules for user authentication and request handling have been stubbed out. The server configuration supports environment variables for database connections and is aligned with the planned Python/FastAPI stack.

Design #

Figma Prototype Link

Figma Project Link

Spline Scene Link

Model was initially created in Blender and then imported into Spline.

User Flow:

User Flow

Data-engineering #

We designed the database schemas for the transactional PostgreSQL and analytical Greenplum databases, as shown in Figure 1. The ER diagram includes tables for users, books, scores, comments, genres, tags, and types, matching the planned database architecture. On the data pipeline side, Apache Airflow has been configured, and we have begun defining the initial DAG for ingesting and processing book and user activity data. These components lay the groundwork for the future recommendation data marts and analytics.

PostgreSQL and Greenplum Database Schema

PostgreSQL and Greenplum Database Schema

Deployment/DevOps #

We created Dockerfiles for each service component and a docker-compose.yml to launch the system locally. Kubernetes deployment manifests have been drafted to orchestrate the containers. Nginx has been configured as a reverse proxy for the FastAPI backend. These efforts align with our infrastructure plan for container orchestration and load balancing. The container images build successfully and preliminary integration tests (e.g. an API health-check endpoint and static content routing) have passed.

Weekly commitments #

Individual contribution of each participant #

  • Denis Troegubov

    • Working init-db.sql and docker-compose for airflow, airflow-db (postgres), backend-db (postgres) and greenplum Link to PR
  • Timur Garifullin

    • Implemented endpoints for multiple pages, added navigation links between them, and extracted the common page layout into a separate template. Link to PR
  • Grigorii Belyaev:

    • Report
    • User flow
    • Expand User stories and defined acceptance criteria for key user stories.
  • Peter Zavadskii:

    • Сontainerized the backend using Docker and configured Nginx. Link to PR
    • Set up the backend directory structure and implemented the first endpoint. Link to PR
    • Deployed the entire system on a remote server. It is available at: http://176.119.159.108 (note: the server is accessible via HTTP only, not HTTPS).
  • Adelina Karavaeva:

Plan for Next Week #

Our key goals for the next week include:

  • Completing integration of frontend and backend, including implementing remaining API endpoints (user registration, book listing, rating submission, etc.).

  • Finalizing the personalized recommendation algorithm and connecting it to the user data model.

  • Extending Airflow pipelines to load and preprocess data (e.g. book meta-data ingestion, user activity logs).

  • Writing automated tests (unit and integration) and setting up a CI/CD pipeline for continuous integration.

  • Finalizing the Kubernetes deployment: applying manifests in a cluster environment and configuring Nginx for full production routing.

Confirmation of the code’s operability #

We confirm that the code in the main branch:

  • In working condition.