Academic Project: This repository is an imported version of a 2nd-semester exam project developed by me and three fellow students for the AP Computer Science program at UCL University College. It is showcased here as part of my professional portfolio.
BellaHair is a comprehensive, full-stack management system designed for hair salons. It streamlines day-to-day operations by providing a unified interface for handling bookings, managing employees and customers, processing treatments, applying dynamic discounts, and generating invoices.
The project was built with a strong emphasis on modern software engineering principles, specifically adhering to Clean Architecture and Domain-Driven Design (DDD). By implementing the CQRS (Command Query Responsibility Segregation) pattern, the system maintains a high level of modularity, testability, and scalability.
- Advanced Booking System: Manage salon appointments with built-in overlap prevention and employee scheduling checks.
- Customer Management: Keep track of private customers, their visit history, and loyalty status.
- Employee Roster: Manage employee profiles and the specific treatments they are qualified to offer.
- Treatments & Products: Maintain a comprehensive catalog of salon treatments (with durations and pricing) and retail products.
- Dynamic Discount Engine: Automatically calculate and apply various discount types, including:
- Loyalty Discounts
- Campaign/Promotional Discounts
- Birthday Discounts
- Invoicing: Generate accurate, itemized invoices for completed bookings.
This project follows a strict Clean Architecture approach to separate concerns and ensure independence from external frameworks:
- Domain Layer: Contains entities (e.g.,
Booking,Employee,PrivateCustomer), and value objects. - Application Layer: Contains business rules and CQRS handlers (Commands) governing the system's behavior.
- Infrastructure Layer: Handles data access using Entity Framework Core, migrations, and external services (e.g., EmailService).
- Presentation Layer: A responsive, interactive user interface built with Blazor.
- Ports / SharedKernel: Defines shared interfaces, settings, and base exception classes to enforce decoupling.
- Language: C#
- Framework: .NET 9
- Frontend: Blazor, MudBlazor, Radzen
- ORM: Entity Framework Core
- Database: MSSQL, SQLite
- Architecture: Clean Architecture, Domain-Driven Design (DDD), CQRS
- Testing: NUnit, FixtureBuilder
- Invoicing: QuestPDF