# Midrand Books Ecommerce Platform

An online bookstore web application designed for Midrand Books, allowing local and national customers to browse, search, and purchase books seamlessly.

## 🚀 Features

* **User Authentication**: Secure customer registration, login, and profile management.
* **Product Catalog**: Advanced search, filtering by genre, and dynamic book categorization.
* **Shopping Cart**: Real-time cart updates, item persistence, and coupon code validation.
* **Secure Checkout**: Integrated payment gateways supporting local South African methods (e.g., PayFast, Ozow, or Yoco).
* **Order Tracking**: Automated email confirmations and live delivery status tracking.
* **Admin Dashboard**: Content management system (CMS) to manage inventory, track sales, and process orders.

## 🛠️ Tech Stack

* **Frontend**: Blazor / HTML5 / Bootstrap CSS
* **Backend**: Blazor Server
* **Database**: PostgreSQL
* **Payment Gateway**: PayFast API / PayPal SDK

## 📋 Prerequisites

Before setting up the project locally, ensure you have the following installed:

* .NET SDK (v6.0 or higher)
* Git

## 🔧 Installation & Setup

Follow these steps to run the project locally.

1. **Clone the repository**
   ```bash
   git clone https://gitea.khongisa.co.za/litecharms/midrandbooks.git
   cd midrandbooks
   ```

2. **Install dependencies**
   ```bash
   # restore NuGet dependencies
   dotnet restore
   ```

3. **Environment Variables**
   Create a `.env` file in both the frontend and backend roots. Use the `.env.example` files provided as a reference.
   ```env
   DATABASE_URL=your_database_url
   Email = mailbox settings
   Monitoring = Aspire dashboard settings
   PAYMENT_GATEWAY_KEY=your_api_key
   ```

4. **Run the application**
   ```bash
   # Start app
   dotnet run
   ```

5. **Access the app**
   Open your browser and navigate to `http://localhost:5000`.

## 📦 Deployment

* **Frontend**: Hosted on Lite Charms Cloud.
* **Backend**: Hosted on Lite Charms Cloud.
* **Database**: Managed on Lite Charms PVC LXC container settings

## 🤝 Contributing

1. Fork the repository.
2. Create a feature branch: `git checkout -b feature/NewFeature`.
3. Commit your changes: `git commit -m 'Add NewFeature'`.
4. Push to the branch: `git push origin feature/NewFeature`.
5. Open a Pull Request.

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
