Skip to content
/ Libro Public

Libro is a full-stack online bookstore app inspired by Yakaboo, built with ASP.NET and React. It supports user roles, subscriptions, e-books, and audiobooks. Includes an admin dashboard, manual order processing, AWS S3 storage, and a microservice architecture.

License

Notifications You must be signed in to change notification settings

zabavb/Libro

Repository files navigation

Libro Logo

Libro – Online Bookstore Web Application (Cover letter)

Libro is a full-stack web application modeled after the Ukrainian book store Yakaboo. It enables users to browse, search, and purchase books online — including physical books, e-books, and audiobooks.

This project was developed as a diploma thesis by a team of 5 programmers and 3 designers at IT Step Academy (Lviv).

🧱 Architecture Overview

  • Backend: ASP.NET Core 8 with a microservices-based architecture
  • Frontend: React with TypeScript
  • Gateway: Ocelot API Gateway and GraphQL-based APIComposer (HotChocolate)

🔙 Backend Details

Microservices

  • UserAPI – Manages users and subscriptions. Features:
    • Role-based authentication (JWT)
    • OAuth (Google login)
    • Roles:
      • Admin – Full access to admin dashboard
      • Moderator – Partial dashboard access (no user management)
      • User – Standard access to personal features like basket, orders, and favorites
  • BookAPI – Handles:
    • Books, authors, publishers, categories, subcategories
    • Discounts and feedback (no edit/delete)
    • Three book types: Paper (delivery), E-book, Audiobook (added to personal library)
    • No real transactions yet – mock purchase flow only
  • OrderAPI – Processes orders manually
    • Order status managed manually by Admin/Moderator
    • No delivery tracking implemented yet

Common Backend Features

  • Pagination, filtering, sorting, and searching across all major entities (books, users, orders, etc.)
  • Redis caching for optimized GET requests
  • Asynchronous programming used wherever possible
  • File storage on AWS S3: user avatars, subscription images, book covers, e-book & audio-book files
  • Access to e-books and audiobooks is secured using signed URLs
  • Serilog for logging and monitoring
  • Custom Exception Middleware for error handling
  • DTOs and AutoMapper used for data transfer
  • Database seeding for test/demo purposes

Architecture Pattern

Microservice → Controller → Service → Repository


🖥️ Frontend Details

Architecture

apiConfig → repository → service → container → component

Main Features

  • React with TypeScript, Vite for bundling
  • Tailwind CSS for styling
  • Zod schema validation for form inputs
  • Image + entity data uploads via FormData
  • Axios for HTTP communication
  • Authentication and user info stored in localStorage
  • Notifications using React/Redux
  • Lazy loading of images
  • Memoization and virtualization for performance
  • Asynchronous data fetching and processing

🔐 Authentication & Authorization

  • JWT-based role authentication
  • OAuth (Google login)
  • Token-protected API routes
  • Frontend reflects role-based UI access

🛠️ Technologies Used

Backend

  • ASP.NET Core 8
  • EF Core
  • Redis
  • Ocelot Gateway
  • GraphQL (HotChocolate)
  • Serilog
  • AWS S3

Frontend

  • React + TypeScript
  • Vite
  • Redux
  • Zod
  • Tailwind CSS
  • Axios

🧪 Development Status

Note: This project simulates the purchase flow without actual payment integrations. Features like real-time delivery tracking and payment processing are planned for future improvements.


🤝 Credits

Developed by a team of 5 programmers and 3 designers as part of the diploma thesis at IT Step Academy, Lviv.


🔗 Repository

GitHub: https://github.com/zabavb/Libro

About

Libro is a full-stack online bookstore app inspired by Yakaboo, built with ASP.NET and React. It supports user roles, subscriptions, e-books, and audiobooks. Includes an admin dashboard, manual order processing, AWS S3 storage, and a microservice architecture.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 7