bookingtogo

A comprehensive React Native mobile application in the online travel industry, designed for booking flights, hotels, trains, tours, and even private jets.
Primarily built for B2B operations, it includes exclusive features such as balance management, travel documents, sub-company accounts, and more.
bookingtogo empowers businesses to streamline their corporate travel needs through a single, efficient platform.

home-icon

Tech Stack & Tools

Android

iOS

React Native

icon

Typescript

icon

Redux

Axios

Key Features

Flight Booking

Book domestic and international flight tickets seamlessly from multiple airlines.
The system supports real-time seat availability, dynamic pricing, and instant e-ticket generation for a smooth and reliable booking experience.

Hotel Booking

Search and book hotel rooms across various destinations with detailed hotel information, including photos, address, available facilities, and room listings.
Designed to make accommodation booking quick, transparent, and convenient for travelers.

Train Booking

Integrated with Kereta Api Indonesia (KAI), this feature allows users to book Indonesian train tickets easily, check train schedules, and receive digital tickets instantly within the app.

Tour Packages

Discover a variety of tour packages that cover both local and international destinations.
Users can view package details, itineraries, and pricing, making it easy to plan group or family vacations with confidence.

Private Jet Booking

This feature allows users to book private jet flights for both personal and corporate travel needs.
It offers fixed routes, flexible scheduling, and direct coordination to ensure a seamless and premium travel experience.

Corporate Features

Built for B2B clients, this module helps companies manage their travel operations efficiently. It includes balance management, travel document uploads, and multi-role access control for departments like Master, Booking, and Finance. A PIN verification system ensures secure balance-based payments, making corporate travel management simple, organized, and secure.

Development Journey

Project Vision & Motivation

bookingtogo began as a platform primarily tailored for B2B clients—companies that needed a reliable system to manage their corporate travel needs. Over time, however, the company’s vision grew. Management wanted the product to evolve, not only to serve business partners but also to reach a broader audience with a fresher, more modern, and more user-friendly experience.

This shift in direction sparked the decision to revamp the entire application. Rather than simply refining the old structure, we chose to rebuild it from the ground up. The previous version relied on React Native with JavaScript and class components, which had served its purpose for years. But to support future scalability, better performance, and cleaner architecture, the new version embraced React Native with TypeScript and functional components—bringing the project in line with modern development standards.

From planning and UI restructuring to implementing new business logic and integrating all travel services, the revamp became a full end-to-end journey. I developed the project starting from a blank codebase all the way through release and continuous maintenance. Throughout the process, the goal remained clear: create a more intuitive, efficient, and forward-thinking application that supports the company’s growth and delivers a better experience for every user.

Challenges Faced

Unstructured Codebase & No Strict Typing

The previous version of the app was built using plain JavaScript, which lacked strict typing and made the overall codebase less predictable. Without enforced type definitions, data handling became error-prone, debugging took longer, and maintaining consistency across features was increasingly difficult as the project grew.

Large, Monolithic Files with Mixed Logic, UI, and Styles

Before the revamp, many screens were structured as giant monolithic files that combined business logic, UI components, and styles in one place—often resulting in thousands of lines of code. This made the code difficult to read, hard to maintain, and slow to expand with new features.

Inconsistent UI/UX Across Screens

The old version of the application lacked a unified design system, resulting in inconsistent spacing, styling, and component behavior across different pages. This inconsistency affected visual quality and slowed down development because components couldn’t be reused effectively.

Performance Issues on Complex Screens

Pages with large datasets—such as flight results or hotel listings—suffered from sluggish rendering and unnecessary re-renders due to inefficient component structures. On lower-end devices, these issues became even more noticeable and significantly impacted user experience.

Solutions Implemented

Implementing TypeScript for Strong Typing

In the revamp, I migrated the entire project to TypeScript to enforce strong and consistent type definitions across the codebase. This ensured safer data handling, reduced runtime errors, improved developer productivity, and made the code far more maintainable in the long term.

Clear Separation of Concerns with a Modular Architecture

During the revamp, I introduced a cleaner architectural structure by separating logic, presentation, and styling. For example, logic was moved into dedicated hooks like useHomeScreen.ts, UI components remained in HomeScreen.tsx, and styles were isolated in styles.ts. This resulted in cleaner, more readable code that is significantly easier to manage and scale.

Establishing a Unified Design System & Reusable Components

I introduced reusable UI components and consistent styling patterns built on top of a shared design system. This improved visual consistency, reduced duplicated code, and accelerated development since the same components could be used across multiple features.

Performance Optimization and Efficient Rendering

To improve performance, I optimized component rendering, implemented memoization where needed, and refined list virtualization for heavy data-driven screens. These enhancements resulted in smoother scrolling, faster loading, and a more responsive experience across a wide range of devices.

Projects Showcase

project-btg

Key Learnings & Takeaways

The Value of Strong Typing & Code Predictability

>

Migrating from JavaScript to TypeScript significantly improved code reliability.

>

Strong typing helped prevent unexpected data issues that previously caused hidden runtime bugs.

>

With clearer type definitions, development became faster and debugging became easier.

>

I learned that investing early in type safety creates long-term stability for large-scale apps.

The Importance of a Well-Structured Architecture

>

Revamping the project from scratch highlighted how crucial a clean and modular architecture is.

>

By restructuring screens, components, and hooks, the app became far easier to maintain and scale.

>

Clear separation of concerns reduced code duplication and simplified onboarding for future developers.

Building a Smooth and Consistent User Experience

>

I learned how UI/UX consistency significantly impacts user satisfaction in a consumer-focused app.

>

Implementing reusable components and standardized design tokens ensured visual consistency across screens.

>

The revamp process helped me understand how small UI details contribute to overall user trust and comfort.

icon

Managing Complex State Effectively

>

Handling features like flight search, hotel booking, and multi-step forms taught me the value of robust state management.

>

I learned how Redux patterns, middleware, and proper slicing help maintain predictable data flow.

>

This experience reinforced the importance of scalable state handling in applications with evolving business logic.

Future Improvements

Over-the-Air Updates with CodePush

Implementing CodePush allows shipping UI updates, hotfixes, and small improvements instantly—without requiring users to download a full app update. This will speed up release cycles and make iteration significantly faster.

Performance Optimization & Bundle Size Reduction

Optimizing the JavaScript bundle, cleaning unused dependencies, and enabling Hermes can improve startup speed and runtime performance, especially on low-end devices frequently used in the target market.

Advanced Error Monitoring & Crash Analytics

Integrating deeper monitoring tools such as Sentry or Crashlytics will provide better visibility into crashes and unexpected behaviors, enabling faster debugging and more stable production releases.

Automated Testing & CI/CD Pipeline Enhancement

Expanding the CI/CD pipeline with automated testing, lint checks, and build verification ensures safer deployments. Implementing tools like Detox or Jest helps maintain code quality and prevents regressions as the app scales.

Let’s Build Something Amazing Together

Ready to take your ideas to reality? I’m always excited to work on new challenges and create innovative solutions.