MyBOLT's Framework Migration: From Cordova to Ionic

Jimmy Leonardo

Jimmy Leonardo

Senior Mobile Engineer & Full-Stack Developer

5 min read
Jimmy Leonardo - MyBOLT's Framework Migration: From Cordova to Ionic

The hardest part of rebuilding MyBOLT from scratch wasn't the new design or the new framework. It was making sure nobody noticed the ground had shifted underneath them.

A Revamp That Started With a Framework Decision

In late January or early February of 2016, MyBOLT reached a point where the official app needed a full revamp. New design, new features, better performance. Part of that conversation was the tech stack itself. The app was built on Cordova, and it was starting to show its age.

I took the initiative to explore alternatives. Cordova had gotten us this far, but performance was becoming a real concern, and building new UI on top of it meant reinventing components that already existed elsewhere. I looked into Ionic and it made sense on every front that mattered: better performance, a set of ready-made components that fit the design direction we wanted, and a more modern development experience overall. It also meant we could move faster without sacrificing quality, which mattered given the timeline we were working with.

I proposed the move, and the decision was made to go with Ionic.

Rebuilding Without Starting From Zero

The approach I took was to build the new app fresh, using the same package name and the same backend APIs, but with a completely different mobile structure underneath. This wasn't a copy-paste port. Ionic and Cordova handle things differently enough that most of the app effectively had to be rebuilt, screen by screen, to match how Ionic expected things to work.

The one problem I couldn't ignore was what would happen to existing users. MyBOLT already had people logged in, mid-session, going about their day. If the update broke their login, we would be trading a better app for a wave of support tickets and frustrated users right at launch.

The fix came down to something simple once I thought it through. Since the new app kept the same package name, local storage carried over automatically when the app updated, even though the framework underneath had completely changed. As long as I structured the new app to read the credential data the same way the old one had written it, users would update the app and stay logged in without noticing anything had changed underneath them. No forced logout, no re-authentication, no broken sessions. It was one of those solutions that looks obvious in hindsight but only because I happened to think about what actually persists across an app update versus what gets wiped clean.

Security on the app at the time relied on obfuscated vanilla JavaScript rather than anything more sophisticated, which was standard for where mobile web security practices were at that point.

Presenting Progress, Not Just a Finished Product

This revamp was driven by a Lippo Group executive who was in charge of MyBOLT at the time. Because it touched both the technical foundation and the entire look of the app, it wasn't something that got approved once and then built in isolation. I went directly to his office for several rounds of live demos before it eventually went live.

Each round covered a mix of things. On the functional side, I would walk through core flows like login, ticket purchase, and browsing available packages to show how much of the app was working end to end on the new stack. On the design side, the conversation was mostly about UI, colors, and how the new visual direction was coming together. It was as much about proving the migration wasn't breaking anything as it was about showing the app looked and felt new.

Shipping It Alone, Backend in Parallel

I handled the entire frontend migration by myself. My manager worked in parallel on backend performance improvements, tuning things on that side while I rebuilt the mobile layer on Ionic. Between the two of us, the app went from an early exploration to a live release by around May 2016, smooth enough that users experienced it as an upgrade rather than a disruption.

MyBOLT stayed live and stable on that stack until the service shut down entirely. That closure had nothing to do with the app itself. Internux, the company behind MyBOLT and part of Lippo Group, lost its license to operate on the 2.3 GHz radio frequency band after failing to settle outstanding government fees, and the Ministry of Communication and Information ordered the shutdown at the end of 2018. The app kept working the whole way through. It just ran out of a network to run on.


Tools and stack: Ionic, Cordova (migrated from), vanilla JavaScript

Areas: mobile framework migration, session and credential continuity, cross-functional demoing, frontend architecture

Sample Screenshot:

Jimmy Leonardo - MyBolt

Jimmy Leonardo - MyBolt

Jimmy Leonardo - MyBolt

Jimmy Leonardo - MyBolt

Jimmy Leonardo - MyBolt

Jimmy Leonardo - MyBolt

Jimmy Leonardo - MyBolt

Share this article

Related Articles

View All Posts →
Jimmy Leonardo

Written by Jimmy Leonardo

Senior Mobile Engineer & Full-Stack Developer with 15+ years of experience engineering production Android, iOS, Nuxt, and Laravel systems for enterprise scale.

Copyright © 2026 Jimmy Leonardo. All Rights Reserved.