Skip to content
Mai Trinh
In progress

VoiceMap — Global Audio Tour Application

A global app for self-guided audio tours. Since April 2026, I've been working on its Android app — building features, modernizing the codebase and tracking down production issues.

Role
Android Developer
Platform
Android
Period
2026
Client
Confidential client

Project overview

Domain
Travel & tourism
Product
Travelers download a tour of a city, neighborhood or attraction and are guided by narration synced to where they are.
Audience
Independent travelers who want to explore at their own pace.
Why it exists
A live guide isn't always available or practical to book. VoiceMap lets travelers start a tour whenever they arrive.
Problem
My focus is keeping that experience reliable as the app, Android and users' devices keep changing.

My role & contributions

I started on VoiceMap's Android app in April 2026, when it was already live. Most of my work is improving it step by step: shipping product and UI changes that fit the current architecture, and moving parts of the codebase from Java to Kotlin along the way. I also investigate and fix production issues. So far my work has covered purchases and Google Play Billing, tour downloads and offline use, sign-in, deep links and navigation, maps and location, media loading, background work, device-specific behavior, and analytics and revenue tracking.

Challenges & solutions

  1. Offline reliability

    Downloaded tours have to work with no connection, images and media included. Some image-loading code quietly assumed a network was available, so offline tours behaved inconsistently. I tracked down where image and media loading still relied on the network or cache, and fixed it so downloaded tours work consistently offline.

    Sign-in flow

    Sign-in and sign-up had grown into one large, hard-to-follow flow, so even small changes were slow and risky. I restructured it around a single host flow with separate screens for entry, OTP verification, password sign-in and account creation, and made navigation and back-stack behavior more predictable. The flow is now easier to follow and safer to change.

    Background work

    Newer Android versions restrict what apps can do in the background, and parts of the app needed to catch up without breaking what already worked. I moved suitable jobs to WorkManager and made notification and state cleanup more reliable.

    Purchases, crashes and analytics

    Some problems spanned the app and several third-party services: crashes, purchase-flow issues, and inconsistent analytics or revenue tracking across Firebase, Amplitude, Branch and Facebook. I traced each report back through the system involved — the crash report, the specific SDK or the purchase flow itself — to find the real cause.

Architecture & technologies

Native Android app, originally written in Java and moving to Kotlin incrementally, built on Android Jetpack. Releases go through GitLab CI/CD, with Firebase App Distribution for internal testing and Google Play for public release.

Technologies

  • Kotlin
  • Java
  • Android Jetpack
  • Retrofit
  • OkHttp
  • Glide
  • WorkManager
  • Room
  • SQLite
  • Google Maps
  • Google Location Services
  • Google Play Billing
  • Firebase
  • Amplitude
  • Branch
  • Facebook
  • Gradle
  • ProGuard/R8
  • GitLab CI/CD
  • Firebase App Distribution
  • Google Play Console

This project demonstrates

It shows I can step into a mature Android codebase, learn how it actually behaves, and improve it steadily — including debugging problems that span the app and the services it depends on.

  • Android Development
  • Legacy Modernization
  • Production Debugging
  • Offline Support
  • Authentication
  • Maps & Location
  • Background Processing
  • Third-Party Integration
  • Release Support

Have a similar project in mind?

Tell me about your product or challenge, and we can discuss how I can help.

Work With Me