An end-to-end e-commerce application and analytical pipeline built as an engineering thesis project at Silesian University of Technology (Politechnika Śląska). The system processes historical e-commerce logs to generate market basket insights using the Apriori algorithm and serves real-time product recommendations within a simulated online store.
The system uses a single PostgreSQL instance isolated into three database schemas to maintain a strict separation of concerns:
| Schema | Ownership | Description | Tech Stack |
|---|---|---|---|
historical |
Data Engineering @LonelyLake |
Raw data ingestion, cleaning, and preparation of the "basket" format. | DuckDB, Python |
shop |
Web Development @ElPollaco |
Operational shop data (users, carts, simulated checkout transactions). | ASP.NET Core, EF Core |
ml |
Data Science @Blazejost |
Association rules generated by the Apriori algorithm, exposed via API. | FastAPI, mlxtend |
├── data/ # Raw and processed datasets (Local only, Git ignored)
│ ├── raw/ # Place downloaded Retailrocket CSVs here
│ └── processed/ # DuckDB analytical storage files
├── database/ # Docker Compose & Database Initialization scripts
├── data-pipeline/ # ETL processes (DuckDB analytical engine)
├── backend/ # E-commerce web backend (C# / .NET)
└── ml-service/ # Association rule mining engine & REST API (Python)
-
Configure Environment Variables:
Navigate to the database directory and copy the template environment file:
cd database cp .env.example .env(Optional: Open the newly created
.envfile and change the password if needed). -
Start the Database:
Spin up the PostgreSQL instance with all predefined schemas and tables:
docker compose up -d
The database will be automatically initialized using
init.sql. You can connect via DBeaver or any other client using the credentials defined in your local.envfile (default values):- Host:
localhost - Port:
5559(or whatever you set asDB_HOST_PORTindatabase/.env) - Database:
retailrocket - User:
admin - Password:
admin(or your custom password from.env)
- Host:
-
Dataset Setup (Local Only):
- Ensure the
data/raw/anddata/processed/folders exist in the project root. - Download the raw Retailrocket CSV files from the team's Google Drive (link shared in chat) and place them inside
data/raw/.
- Ensure the
To ensure clean collaboration, the team follows the GitHub Flow:
main branch is protected. No direct commits allowed.
Create a feature branch for your work: feature/your-feature-name.
Open a Pull Request (PR) to merge into main. At least one team member must review it.
Keep code and comments strictly in English.