Currently building — Go Projects
R.

Maliva is a tourism guide app for Malang Raya, designed to help tourists and locals alike make the most out of their trip. Through our application, you can explore the best local attractions, learn about the culture, and plan your trip accordingly.

Express.jsFirebaseGoogle CloudREST APIs

The Mission

Cloud backend for Maliva, a mobile tourism guide app for Malang Raya, Indonesia. The cloud track built and deployed the REST API that served both the Android client and a separate ML recommendation service. Capstone project for Bangkit Academy 2024 (Google, GoTo, Tokopedia, Traveloka). The constraint was real: three tracks (mobile, ML, cloud) working in parallel toward a fixed demo deadline, each team deploying independently.

The Problem

Three teams (Android, ML, Cloud) needed to integrate at a fixed deadline with no full-time coordination. The cloud track had to build a backend that both the mobile app and the ML model could consume, while keeping deployments independent enough that one track's changes couldn't break another's.

How I solve it

Defined an OpenAPI-style contract document at project start and shared it across all tracks. The cloud API was built with Express.js and deployed to Cloud Run via Docker. The ML model was wrapped as an independent Cloud Run endpoint called over HTTP, keeping it loosely coupled by design. GitHub Actions automated the full build-push-deploy pipeline on every push to main, removing manual deployment entirely.

Key Features

  • Attraction discovery for Malang Raya local spots
  • ML-powered personalised recommendations
  • Custom-built authentication and authorization with JWT
  • Firestore content store integration
  • Automated CI/CD via GitHub Actions
  • Containerised deployment on Cloud Run

Architecture Overview

Microservice-style cloud architecture on GCP. The Android app communicates with a central Express.js API on Cloud Run. The API uses a custom-built authentication and authorization system with JWT for token verification, Firestore for content data, Firebase Storage for file storage, and makes HTTP calls to a separate ML service for personalised recommendations. CI/CD is fully automated via GitHub Actions.

Client
Android App

User-facing mobile client for Malang Raya tourism

Express.js API (REST)
API Layer
Express.js API

Core REST backend: attractions, users, trip data

Custom Auth (token verify)Firestore (read / write)ML Service (HTTP recommendation)
Service Layer
ML Service

Recommendation model wrapped as a Cloud Run endpoint

Custom Auth

Custom-built authentication and authorization with JWT

Data Layer
Firebase Storage

File and media storage

Firestore

NoSQL content store: attractions, user data

Infrastructure
Cloud Run

Serverless container runtime for API and ML service

GitHub Actions

CI/CD pipeline: build Docker image, push to registry, deploy

Cloud Run (Docker deploy)
Client
API Layer
Service Layer
Data Layer
Infrastructure