A cloud-native, microservices-based K-Drama and Movie tracking web application built with modern technologies and deployed on Azure Container Apps.
π Live Site: HallyuHub on Azure
HallyuHub allows users to:
- π Browse a catalog of popular K-Dramas and movies
- β Add titles to a personal watchlist with a rating
- β Remove titles from the watchlist
- π€ Get AI-style recommendations based on genres from the user's watchlist
The application follows a microservices architecture with four independent services, each containerized with Docker and deployed to Azure Container Apps.
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (React) β
β Vite + TypeScript + Tailwind CSS β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β REST API Calls
ββββββββββββββΌβββββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββ ββββββββββββββββ βββββββββββββββββββββ
β Catalog β β Watchlist β β Recommender β
β Service β β Service β β Service β
β (Java / β β (Node.js / β β (Python / Flask) β
β Spring) β β Express.js) β β β
ββββββββββββ ββββββββββββββββ βββββββββββββββββββββ
- Provides a list of K-Dramas and movies with metadata (title, genre, release year, rating)
- Endpoint:
GET /api/catalog - Deployed at:
https://catalog-app.icyhill-d8a50826.southeastasia.azurecontainerapps.io
- Manages a user's watchlist using an in-memory store
- Endpoints:
GET /api/watchlist/:userIdβ Get user's watchlistPOST /api/watchlistβ Add a title to the watchlistDELETE /api/watchlist/:userId/:catalogIdβ Remove a title from the watchlist
- Deployed at:
https://watchlist-app.icyhill-d8a50826.southeastasia.azurecontainerapps.io
- Fetches the user's watchlist and catalog, then recommends unwatched titles based on matching genres
- Endpoint:
GET /api/recommendations/:userId - Deployed at:
https://recommender-app.icyhill-d8a50826.southeastasia.azurecontainerapps.io
- Single-page application (SPA) that consumes all three backend services
- Deployed at:
https://frontend-app.icyhill-d8a50826.southeastasia.azurecontainerapps.io
- Docker Desktop installed and running
git clone https://github.com/hasinduudara/HallyuHub-Microservices.git
cd HallyuHub-MicroservicesCatalog Service (Java / Spring Boot)
cd catalog-service
./mvnw spring-boot:runWatchlist Service (Node.js / TypeScript)
cd watchlist-service
npm install
npm run devRecommender Service (Python / Flask)
cd recommender-service
pip install -r requirements.txt
python app.pyFrontend (React / Vite)
cd frontend
npm install
npm run devHallyuHub-Microservices/
βββ .github/
β βββ workflows/
β βββ docker-publish.yml # CI/CD β Build & Push to Docker Hub
βββ catalog-service/ # Spring Boot β Catalog API
βββ watchlist-service/ # Node.js/Express β Watchlist API
βββ recommender-service/ # Python/Flask β Recommender API
βββ frontend/ # React/Vite β Web UI
This project uses GitHub Actions to automate the build and deployment pipeline.
Trigger: Every push to the main or master branch automatically:
- β Checks out the source code
- π Logs in to Docker Hub using GitHub Secrets (
DOCKER_USERNAME,DOCKER_PASSWORD) - ποΈ Builds Docker images for all four services
- π Pushes images to Docker Hub with the
latesttag
| Service | Docker Hub Image |
|---|---|
| Catalog Service | <DOCKER_USERNAME>/catalog-service:latest |
| Watchlist Service | <DOCKER_USERNAME>/watchlist-service:latest |
| Recommender Service | <DOCKER_USERNAME>/recommender-service:latest |
| Frontend | <DOCKER_USERNAME>/frontend:latest |
| Secret | Description |
|---|---|
DOCKER_USERNAME |
Your Docker Hub username |
DOCKER_PASSWORD |
Your Docker Hub access token |
| Platform | Link |
|---|---|
| π§ Email | hasiduudara@gmail.com |
| πΌ LinkedIn | linkedin.com/in/hasindu-udara |
| π GitHub | github.com/hasinduudara |
| π Portfolio | portfolio |
Built with β€οΈ by Hasindu Udara