This project is designed to track products and notify users when they go on sale. By entering the product URL and your email into the dashboard, you can receive notifications whenever the product's price decreases or falls below a specified threshold. Additionally, the dashboard lets you view the price history of tracked products, making sure you always get the best price.
Folder | Description |
---|---|
.github | GitHub-specific files and Actions. |
.util | Utility scripts and tools for GitHub Actions. |
Clean-up | The scripts for cleaning up unsubscribed products from the database. |
Dashboard | Code used for the dashboard and visualization. |
Database | Database management scripts and configurations. |
Diagrams | Diagrams of the system architecture and entity relationship diagram. |
ETL | ETL pipeline scripts and configurations. |
This project is split into several main directories that contain the source code regarding that section. Each section has it's own terraform script that is used to build AWS infrastructure.
Dependencies are local to each main directory and it is thus recommended to set-up the code in the following manner (Click and follow the steps in the README.md of each):
The architecture of the project is shown in the following brief overview:
The Hermes Sale Tracker project uses cloud architecture designed for efficiency, scalability, and automation. Below is a detailed description of each component and its role in the system.
An Amazon RDS instance is used to store the tables as depicted in the Entity Relationship Diagram (ERD). These tables include:
The Extract, Transform, Load (ETL) pipeline is designed for updating product price data regularly and allowing for extensive upscaling without compromising performance.
The Streamlit dashboard provides a user interface for managing and tracking product subscriptions. It runs on an Amazon ECS (Elastic Container Service) and offers the following functionalities:
A cleanup script runs daily to remove the RDS entries that no longer have any users subscribed to them, reducing redundancy.
Each component of the architecture is provisioned and managed using Terraform scripts, ensuring consistency, scalability. Continuous Integration and Continuous Deployment (CI/CD) practices are followed, allowing for seamless deployment and updates.
AWS was chosen for this project because it is the most widely used cloud platform and offers a wide range of tools and services that allow for scalability, and ease of use.
AWS Lambda: Serverless compute service that runs code in response to events. Lambda functions are used in the ETL pipeline for data extraction, transformation, and loading processes, ensuring efficient and scalable data handling.
Amazon RDS (Relational Database Service): Managed relational database service that provides scalable and reliable database solutions. RDS is used to store the core data for the application, including user information, subscriptions, product details, and price readings.
Amazon ECS (Elastic Container Service): Highly scalable container orchestration service. ECS is used to run the Streamlit dashboard, allowing for containerized application management and deployment.
Amazon ECR (Elastic Container Registry): Managed Docker container registry that makes it easy to store, manage, and deploy Docker container images. ECR is used to store the Docker images for the Streamlit dashboard and each of the lambdas.
Amazon SES (Simple Email Service): Scalable and cost-effective email service. SES is used to send email notifications to users when product prices drop below specified thresholds, ensuring timely alerts.
Amazon EventBridge: Serverless event bus that makes it easy to launch applications using a schedule. EventBridge is used to trigger the cleanup script and the price checking ETL pipeline.
The database structure can be seen in the following diagram:
Table | Description |
---|---|
users | Containing the contact information for each registered user |
subscriptions | Containing products that each user is subscribed to as well as the optional price threshold that the user entered for each product |
products | Containing the data for each product that is being tracked |
price_readings | Containing the readings for the the prices for each product over time |
Name | Github Profile |
---|---|
Faris Abulula | A-Faris |
Berkay Dur | BerkayDur |
Daniel Hudson | danfh00 |
Nabiha Mohamed | NabihaMoh |
We hope you find this project useful for tracking and managing product sales. Happy tracking!