https://github.com/thejasmeetsingh/watcher
A dynamic content recommendation and management system designed to master Kubernetes through hands-on experience.
https://github.com/thejasmeetsingh/watcher
Last synced: 3 months ago
JSON representation
A dynamic content recommendation and management system designed to master Kubernetes through hands-on experience.
- Host: GitHub
- URL: https://github.com/thejasmeetsingh/watcher
- Owner: thejasmeetsingh
- Created: 2024-08-26T14:35:40.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2024-09-13T16:02:54.000Z (9 months ago)
- Last Synced: 2024-09-17T09:18:36.615Z (9 months ago)
- Language: Go
- Size: 101 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
![]()
Discover a vibrant, ever-evolving movie database that invites you to explore an extensive collection of filmsβwhether they're timeless classics, currently screening hits, or highly anticipated future releases. Dive deep into each movieβs details, and curate your own personal watchlist to effortlessly track and organize your cinematic journey.
## π οΈ Tech Stack
Backend Powerhouse
![]()
Frontend Magic
![]()
DevOps Arsenal
![]()
## ποΈ Architecture

## π Key Features
### π‘ Movie Discovery
- Browse extensive movie collections
- Search functionality with real-time results
- Genre-based filtering
- Detailed movie information with recommendations
- Integration with The MovieDB API### π ― User Experience
- Secure token-based authentication
- Personal watchlist management
- Favorite movies feature
- Track watched/unwatched movies
- Progress tracking for your movie journey### π§βπ§ Technical Excellence
- Redis caching layer for optimal performance
- Prometheus metrics integration
- Custom middleware for logging and monitoring
- Fully containerized architecture
- Production-grade Kubernetes deployment## π§± Application Structure
The application is divided into three main services:
### π ― User Service
- Handles authentication and user management
- Token-based security implementation### π¦ Content Service
- Movie data management
- Integration with The MovieDB API
- Redis-backed caching layer
- Search and filtering capabilities
- Favorites management### π Watchlist Service
- Personal watchlist management
- Progress trackingApplication also contains custom middlewares for Request/response logging and Prometheus Metric collection.
## βοΈ Kubernetes Infrastructure
The infrastructure is organized into three namespaces:
### π App Namespace (app)
- Backend application deployment
- PostgreSQL database
- Associated ConfigMaps and Secrets
- Persistent volume configurations
- Service definitions### β‘οΈ Cache Namespace (cache)
- Redis deployment
- Cache-specific configurations
- Associated services### π Monitoring Namespace (monitoring)
- Prometheus deployment
- Grafana setup
- Monitoring configurations### Key Infrastructure Components
- Nginx Ingress Controller for traffic routing
- Helm charts for service management
- Persistent volumes for data storage
- Service mesh for inter-service communication## Watch the demoπ
[](https://ja3-projects.s3.ap-south-1.amazonaws.com/watcher.mp4)
## π Getting Started
### π΄ Prerequisites
- [Docker](https://docs.docker.com/get-started/get-docker/)
- [Minikube](https://minikube.sigs.k8s.io/docs/start/)
- [Kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
- [Helm](https://helm.sh/docs/intro/install/)
- [Node.js](https://nodejs.org/en/download)
- [TheMovieDB Credentials](https://developer.themoviedb.org/docs/getting-started)### π§ Local Development Setup
1. Clone the project repository to your local machine.
2. Backend
- Start local k8s cluster: `minikube start --cni=calico`
- Enable ingress service on minikube: `minikube addons enable ingress`
- Deploy services with helm: `helm install watcher src/k8s`
- Access the services by running: `kubectl port-forward -n ingress-nginx services/ingress-nginx-controller 8080:80`
3. Frontend
- Navigate to the frontend folder.
- Install libraries: `npm install`.
- Run the frontend app: `npm run dev`### ποΈ Key Endpoints
- Frontend App: http://localhost:5173/
- API docs: http://127.0.0.1:8080/docs/
- Raw Metrics: http://127.0.0.1:8080/metrics/
- Prometheus: http://127.0.0.1:8080/prometheus/
- Grafana: http://127.0.0.1:8080/grafana/### π Notes
- Once you retrieve TheMovieDB API credentials, please update the `secrets.yaml` file located under `src/k8s/templates/app` and add the access token for the `MOVIE_DB_ACCESS_TOKEN` variable.
- The grafana login credentials are:
- **username:** admin
- **password:** 1234Please update the credentials in `secrets.yaml` the file, which is located under `src/k8s/templates/monitoring` If you want to change it and set it to something else.
- Use http://watcher-prometheus/prometheus as the Prometheus URL. When you add Prometheus as a data source in Grafana (please refer to the demo video π).
---
Built with β€οΈ for learning Kubernetes and modern DevOps practices.