Skip to content
@TemanWisata

Teman Wisata | K-21 Deploycamp 2025 Capstone Project

Tourism Recommender System
Project Logo

Teman Wisata: Your Personalized Indonesian Travel Companion

Stop scrolling, start exploring. Discover your dream destinations in Indonesia with personalized recommendations.

Capstone Badge Project Status Down Demo


Table of Contents
  1. The Big Idea
  2. Key Features
  3. Live Demo & Walkthrough
  4. Technology & Architecture
  5. Running it Locally
  6. The Team
  7. What's Next?

🎯 The Big Idea

Every great project starts with a problem. Here's ours:

The Problem: The modern traveler faces a paradox of choice—an overwhelming amount of information when planning a trip. Sifting through countless blogs, reviews, and travel sites is time-consuming and often leads to visiting the same popular, overcrowded places. This "information overload" can diminish the travel experience and prevents tourists from discovering hidden gems that match their unique interests.

Our Solution: "Teman Wisata" (meaning "Travel Buddy") is a recommender system designed to solve this problem for tourism in Indonesia. By leveraging machine learning, our platform provides highly individualized travel recommendations. We analyze user preferences and interactions to suggest attractions across five major Indonesian cities: Jakarta, Yogyakarta, Semarang, Bandung, and Surabaya. Our goal is to simplify trip planning, enhance the traveler's journey, and promote a diverse range of local attractions.


✨ Key Features

Here's what our project can do. We focused on creating a seamless user experience through these core functionalities:

  • 🎯 Personalized Recommendations: After rating a few destinations, the system uses collaborative and content-based filtering to generate a personalized list of similar locations that are likely to appeal to the user.

  • 📍 Rate Destinations: Users can rate tourist attractions, which helps the system learn their preferences and improve the quality of future recommendations.

  • 🏆 Discover Top Places: See a curated list of the top-rated destinations and popular attractions by province to get inspiration for your next trip.

  • ⚡ Fast & Responsive: Implemented caching for the recommendation models to ensure users receive suggestions quickly and efficiently.

  • 🔐 Secure Authentication: A complete authentication system allows users to sign up, log in, and manage their own interaction data securely.

🔍 System Overview

Teman Wisata System Overview

How our recommendation system works


🚀 Live Demo & Walkthrough

Seeing is believing. Check out our project in action!

📱 Application Screenshots

Recommendations Page Rating Page Rating Page

🛠️ Technology & Architecture

This project was built with a modern, scalable, and resilient MLOps stack. Our goal was to ensure high performance, reliability, and robust observability from development to production.

Core Technologies:

🛠️ Technology & Architecture This project was built with a modern, scalable, and resilient MLOps stack. Our goal was to ensure high performance, reliability, and robust observability from development to production. Core Technologies:

Backend & MLOps:

Python FastAPI Kubernetes Docker Supabase Redis MLflow Grafana

Frontend:

TypeScript Vite Alpine.js Tailwind CSS DaisyUI

Architecture Overview:

Our system is designed as a microservices architecture, containerized and orchestrated with Kubernetes (K3s). The infrastructure is deployed on a single VM, prioritizing resource efficiency while maintaining full compatibility and scalability.

  • Frontend: Built with TypeScript, Alpine.js, Vite, Handlebars, Tailwind, and DaisyUI for a responsive, fast, and efficient user interface.
  • Backend: A high-performance RESTful API powered by FastAPI (Python), handling all business logic, data processing, and interactions with the ML models.
  • Database & Cache: We use Supabase (PostgreSQL) as our primary database for relational data and Redis for high-speed caching of frequent queries and recommendation results.
  • Machine Learning: Models are trained using the RecTools library. The entire ML lifecycle, including experiment tracking and model storage, is managed with MLflow and MinIO.
  • Deployment & Orchestration: The application is containerized with Containerd and deployed on a lightweight K3s Kubernetes cluster running on Ubuntu 22.04 LTS. Networking is managed by Flannel and exposed securely via NGINX Ingress Controller and Cloudflare.
  • Observability: A comprehensive monitoring and logging stack is implemented using Prometheus, Grafana, Loki, and Promtail to provide deep insights into system health, metrics, and logs.
Architecture Diagram

Our System Architecture Diagram


⚙️ Running it Locally

Want to get your hands dirty? Follow these steps to set up the project on your local machine. For more detail, please visit the main repository.

➡️ Explore the Main Codebase

# 1. Clone the main repository
git clone https://github.com/TemanWisata/teman-wisata.git

# 2. Navigate into the project directory
cd teman-wisata

# 3. Install dependencies (requires Python and Node.js)
# Follow the detailed setup instructions in the repository's README.

# 4. Set up your environment variables
# Create a .env file based on the provided examples.

# 5. Start the application (using Docker Compose for local dev)
make docker-build
make docker-run

👨‍💻 The Team

This project was made possible by our dedicated team.

Name Role GitHub Profile LinkedIn Profile
Putu Gede Pradana Adnyana ML Engineer @pradanaadn /in/pradanaadn
Achmad Rifki Raihan Syah Bagja ML Engineer @achmadrrb /in/achmad-rifki-raihansyah-bagja
Ahmad Hufron DevOps Engineer @ahmadhufron /in/ahmadhufron

🔮 What's Next?

We're proud of what we've built, but we're not done yet! Here are some features and improvements we're planning for the future:

  • Enable Autoscaling: Adopt autoscaling with HPA or KEDA to dynamically adjust resources based on traffic load.
  • Expand to a Multi-Node HA Cluster: Migrate from a single-node VM to a high-availability cluster to improve fault tolerance and scalability.
  • Implement a CI/CD Pipeline: Automate the build, test, and deployment process to streamline development and ensure code quality.
  • Enable Distributed MinIO: Configure MinIO in a distributed mode for more resilient and scalable object storage.
  • Add Distributed Tracing: Integrate Tempo or Jaeger to get a comprehensive view of requests as they travel through our microservices.
  • Introduce a Service Mesh: Implement a service mesh like Kiali to enhance observability, traffic management, and security between services.

Made with ❤️ for the Deploycamp 2025

Pinned Loading

  1. teman-wisata teman-wisata Public

    Teman Wisata

    Python 2

Repositories

Showing 4 of 4 repositories

Top languages

Loading…

Most used topics

Loading…