Projects

Personal and professional work - selected for impact and technical depth.

Creature Keeper

In Progress Personal

A relaxing idle creature-collection game for iOS and Android. Collect, nurture, and evolve creatures while building habitats and sending expeditions - even while you sleep.

Flutter Dart Bloc +3

Restaurant Chain Solution (Okya)

In Progress Professional

A suite of Flutter applications for restaurant chains - Self-Ordering Kiosk, POS, Order Management, and Kitchen Display systems.

Flutter Dart

Clean Notes

Personal

A minimal note-taking Android app built to demonstrate Clean Architecture principles in a real, published codebase.

Kotlin Android Clean Architecture +2

Android Templates

Professional

A public open-source template collection for quickly bootstrapping new Android projects with production-ready architecture and tooling, maintained at Nimble.

Kotlin Jetpack Compose Android +2

The Coffee Bean & Tea Leaf

Professional

Food and drink delivery application for ordering from The Coffee Bean & Tea Leaf across Malaysia, built by Nimble.

Kotlin Jetpack Compose Clean Architecture +1

1112 Delivery

Professional

Multi-brand food delivery application for Minor Food Group, built for Nimble. Covered order and delivery across multiple restaurant brands.

Kotlin Jetpack Compose

DeeMoney

Professional

Financial application for transferring money internationally, built for Nimble. Focused on onboarding flow integrity and regulatory compliance features.

Kotlin Android

EDTR

Professional

Attendance and inventory tracking application with 10,000+ users across South-East Asia, built at E-Science Corp. Led the modernisation from Java to Kotlin and Clean Architecture.

Kotlin Java Android +2

SOLE CRM

Professional

Salesforce mobile application for tracking potential customers and business opportunities, built at E-Science Corp. Added calendar integration and dashboard reporting features.

Kotlin Java Android +2
Creature Keeper
In Progress Personal 2025 – Present

Creature Keeper

A relaxing idle creature-collection game for iOS and Android. Collect, nurture, and evolve creatures while building habitats and sending expeditions - even while you sleep.

Flutter Dart Bloc Hive AdMob in_app_purchase

Role

  • Sole developer - design, architecture, and implementation
  • Game designer - core loop, economy, and balance design

Key Contributions

  • Designed a three-pillar core loop (Habitats → Expeditions → Evolution) with meaningful tradeoffs, including an expedition injury system that forces strategic roster management
  • Engineered a tick-less game engine where all resource generation is calculated retroactively from elapsed time, enabling reliable offline progression capped at 8 hours
  • Implemented client-side time-cheat mitigations including a 100-snapshot save history, negative-delta clock detection, and automatic rollback on repeat offences
  • Architected across Clean Architecture layers (domain/data/presentation) with Bloc for predictable, testable state management
  • Designed ethical F2P monetization with rewarded ads and cosmetic/convenience gems - no pay-to-win

Overview

Creature Keeper is a relaxing idle game where players collect, nurture, and evolve adorable creatures across 5 elemental families. Build habitats, send creatures on expeditions, and grow your collection - even while away from the game.

Targeting a soft launch on iOS and Android via Flutter.

Core Loop

The game revolves around a three-pillar flywheel:

  1. Habitats - place creatures in elemental habitats to passively generate Coins and Essence.
  2. Expeditions - send creatures on timed missions (5 min → 8 hr) to discover new species, gather evolution materials, and earn rare loot.
  3. Evolution - spend resources to level up and evolve creatures through three stages (Baby → Juvenile → Adult), unlocking stronger passive generation and expedition capabilities.

Better creatures produce more resources, which unlock harder expeditions, which yield rarer creatures, which fuel further evolution.

Technical Focus

Tick-less game engine: No real-time simulation loop. All resource generation is calculated retroactively when the app opens using elapsed = now - lastSaveTime. This makes the engine simple, testable, and perfectly accurate for offline play.

Offline-first architecture: Habitat income accumulates for up to 8 hours offline. Expeditions complete on schedule regardless of app state. A “Welcome Back” screen summarises offline earnings and completed expeditions on return.

Time-cheat mitigation: Without a server, full prevention is impossible. The approach: maintain a rolling 100-snapshot save history in Hive; detect clock rollback (negative delta > 1 minute); on first offence clamp elapsed to zero; on repeat offences roll back to the last valid save and purge future records.

Architecture: Clean Architecture across domain, data, and presentation layers. Bloc for state management throughout. Hive for fast local persistence with save format versioning from day one to support future migrations.

Content Scope (Soft Launch)

  • 5 elements: Nature, Fire, Water, Shadow, Light
  • 15 creature families (45 total forms across Baby/Juvenile/Adult evolution stages)
  • 5 habitat types with passive income and element-match bonuses
  • 15 expedition zones (5 elements × 3 difficulty tiers) with 4 duration options
  • ~30 achievements with Gem rewards
  • Cosmetic creature skins (purchasable with Gems)
Restaurant Chain Solution (Okya)
In Progress Professional May 2025 – Present

Restaurant Chain Solution (Okya)

A suite of Flutter applications for restaurant chains - Self-Ordering Kiosk, POS, Order Management, and Kitchen Display systems.

Flutter Dart

Role

  • Team lead of the Kiosk system
  • Led development, created and managed backlog, and coordinated development efforts across systems

Key Contributions

  • Team lead on the Self-Ordering Kiosk system within a multi-product suite (Kiosk, POS, Order Management, Kitchen Display)
  • Responsible for delivery, task coordination, and technical decisions on the Kiosk, POS, and Order Management products

Overview

Okya is an all-in-one restaurant technology platform. The suite includes a Self-Ordering Kiosk, POS, Order Management system, and Kitchen Display system - all built in Flutter to share a consistent codebase and design language across touchpoints.

My Role

As team lead on the Kiosk system, I’m responsible for the technical direction and delivery of the self-ordering kiosk product. This includes managing the backlog, assigning tasks, coordinating with other system teams, and making architectural decisions. I also engage in technical discussions and architectural decisions across each of the four products.

Technical Focus

Building a multi-product Flutter suite requires careful separation of shared logic from product-specific features. The architecture supports independent development of each system while maintaining consistency across the platform.

Clean Notes
Personal Jan 2021 – Feb 2021

Clean Notes

A minimal note-taking Android app built to demonstrate Clean Architecture principles in a real, published codebase.

Kotlin Android Clean Architecture MVVM SQLite

Role

  • Sole developer - design, architecture, and implementation

Key Contributions

  • Built as a deliberate showcase of Clean Architecture with strict separation of domain, data, and presentation layers
  • Published to the Google Play Store as a real-world reference implementation
  • Demonstrates MVVM, repository pattern, and dependency inversion in a concise, readable codebase

Overview

Clean Notes is a basic note-taking application built with a single goal: demonstrate Clean Architecture principles in a real Android app. It’s intentionally simple in scope so the architecture speaks for itself.

Technical Focus

The project follows a strict three-layer Clean Architecture separation:

  • Domain layer - entities and use cases with no Android dependencies
  • Data layer - repository implementations and SQLite data source
  • Presentation layer - MVVM with ViewModels and Android UI components

This structure makes the codebase easy to navigate, test, and extend - the same principles applied to production apps at scale.

Android Templates
Professional Aug 2022 – May 2025

Android Templates

A public open-source template collection for quickly bootstrapping new Android projects with production-ready architecture and tooling, maintained at Nimble.

Kotlin Jetpack Compose Android Clean Architecture MVVM

Role

  • Lead maintainer
  • Backlog owner and task assignment

Key Contributions

  • Lead maintainer of Nimble's public Android Template repository - responsible for managing the backlog, assigning tasks, and reviewing contributions
  • Templates are used by internal teams to bootstrap new Android projects with consistent architecture, tooling, and structure
  • Drove the initiative to explore migration from XML layouts to Jetpack Compose across internal projects

Overview

Nimble’s Android Templates repository provides a collection of project templates for quickly generating a new Android project with commonly used features, architecture patterns, and tooling pre-configured. As lead maintainer, I owned the direction and health of the repository over nearly three years.

My Role

As lead maintainer, I was responsible for:

  • Managing the backlog and prioritising template improvements
  • Assigning tasks to contributors and reviewing pull requests
  • Ensuring templates stayed current with Android ecosystem changes
  • Driving the Jetpack Compose migration initiative internally

Technical Focus

A template repository has a different maintenance model to a product: it needs to be exemplary by definition, since it sets the standard for every project generated from it. This meant keeping architecture patterns clean, tooling up to date, and documentation clear - so that engineers spinning up new projects could start with confidence rather than technical debt.

The Coffee Bean & Tea Leaf
Professional Aug 2023 – May 2025

The Coffee Bean & Tea Leaf

Food and drink delivery application for ordering from The Coffee Bean & Tea Leaf across Malaysia, built by Nimble.

Kotlin Jetpack Compose Clean Architecture MVVM

Role

  • Mobile developer on the Android/Flutter team

Key Contributions

  • Delivered a food and drink delivery app for a major international café chain across Malaysia
  • Maintained high unit test coverage across all assigned features

Overview

A food and drink delivery application for The Coffee Bean & Tea Leaf in Malaysia. Built at Nimble, the app allows customers to browse the menu, place orders, and arrange delivery from their nearest CBTL outlet.

Technical Focus

Built with Flutter, following Clean Architecture and the patterns established across Nimble’s mobile projects. Emphasis on unit test coverage and code review standards consistent with Nimble’s certification-level quality bar.

1112 Delivery
Professional Jul 2022 – Mar 2023

1112 Delivery

Multi-brand food delivery application for Minor Food Group, built for Nimble. Covered order and delivery across multiple restaurant brands.

Kotlin Jetpack Compose

Role

  • Mobile developer and temporary Team Lead
  • Reviewed pull requests from internal and external developers

Key Contributions

  • Acted as temporary Team Lead during the primary lead's sabbatical leave - managed delivery, reviewed PRs, and made day-to-day technical decisions
  • Reviewed pull requests from both internal and external developers to ensure all changes met acceptance criteria
  • Maintained delivery momentum across the team during a period of leadership transition

Overview

1112 Delivery is a food delivery application covering multiple restaurant brands under Minor Food Group. Built at Nimble, the app handles browsing, ordering, and delivery across a portfolio of brands from a single interface.

My Role

In addition to feature development, I stepped into the Team Lead role while the primary lead was on sabbatical. This meant managing the sprint backlog, reviewing pull requests from both internal team members and external contractors, and ensuring the project continued to ship against its deadlines.

Technical Focus

Built with Flutter following Clean Architecture. Code review standards were enforced against Nimble’s acceptance criteria, ensuring consistency across contributions from developers with varying familiarity with the codebase.

DeeMoney
Professional Jan 2022 – Jun 2022

DeeMoney

Financial application for transferring money internationally, built for Nimble. Focused on onboarding flow integrity and regulatory compliance features.

Kotlin Android

Role

  • Mobile developer on the Android/Flutter team

Key Contributions

  • Reworked the multi-step sign-up flow to support seamless resumption when a user quits mid-registration - eliminating data loss and reducing drop-off
  • Implemented the eKYC flow enabling new users to complete identity verification by scanning a passport MRZ (machine-readable zone)

Overview

DeeMoney is a fintech application for transferring money abroad, serving users in Thailand. Built at Nimble, the project required careful attention to onboarding reliability and regulatory compliance flows.

Key Contributions

Sign-up flow rework: The original multi-step registration flow had no resume capability - users who quit mid-flow had to start over. I rebuilt the flow to persist progress at each step, allowing seamless resumption from wherever the user left off.

eKYC integration: Implemented the identity verification flow that allows new users to sign up by scanning their passport’s MRZ (machine-readable zone). This removed friction from a previously manual verification process and brought the app in line with regulatory requirements.

Technical Focus

Onboarding reliability in fintech is non-negotiable - a user who drops out of sign-up is a lost customer. The resume-capable flow required careful state persistence across app sessions, and the eKYC integration required working with device camera APIs and MRZ parsing within the Flutter/Kotlin stack.

EDTR
Professional May 2019 – Dec 2021

EDTR

Attendance and inventory tracking application with 10,000+ users across South-East Asia, built at E-Science Corp. Led the modernisation from Java to Kotlin and Clean Architecture.

Kotlin Java Android Clean Architecture SQLite

Role

  • Lead mobile developer on attendance and inventory modules
  • Spearheaded the Java to Kotlin migration

Key Contributions

  • Lead mobile developer on both the attendance and inventory tracking modules of an app with 10,000+ active users across South-East Asia
  • Spearheaded the migration from Java to Kotlin and introduced Clean Architecture to a previously unstructured legacy codebase
  • Optimised data transfer and querying for large inventory datasets, improving performance for field users on limited connectivity
  • Projects under lead made up 21% of company revenue as of 2021

Overview

EDTR is an attendance and inventory tracking application used by more than 10,000 users across South-East Asia. Built at E-Science Corp, it serves field teams who need reliable tracking and reporting on limited connectivity.

My Role

I was the lead mobile developer on both the attendance and inventory modules - the two core features of the product. Beyond feature development, I drove the technical modernisation of the codebase.

Key Contributions

Java → Kotlin migration: The codebase was originally Java. I spearheaded the incremental migration to Kotlin, establishing patterns for the team and ensuring consistency as new code was written in Kotlin while legacy code was progressively converted.

Clean Architecture introduction: The existing codebase had no clear architectural structure. I pushed for and led the adoption of Clean Architecture, giving the team a shared mental model for how to organise code across layers.

Performance optimisation: Inventory tracking involves large datasets that needed to be queried and synced efficiently. I optimised the data transfer and querying logic, making the app reliably usable for field users on slower connections.

Technical Focus

Legacy modernisation at scale requires sequencing carefully - breaking changes on a live app used by 10,000+ people carry real risk. The migration was done incrementally, with Kotlin interop allowing new and old code to coexist until full migration was complete.

SOLE CRM
Professional Jul 2017 – Dec 2021

SOLE CRM

Salesforce mobile application for tracking potential customers and business opportunities, built at E-Science Corp. Added calendar integration and dashboard reporting features.

Kotlin Java Android Google Calendar API SQLite

Role

  • Mobile developer

Key Contributions

  • Created dashboard widgets summarising sales pipeline and meeting information for field sales teams
  • Added Google Calendar integration allowing users to schedule meetings with clients and send calendar invitations directly from the app

Overview

SOLE is a salesforce mobile application used by E-Science Corp’s clients to track potential customers, manage business opportunities, and coordinate field sales activity.

Key Contributions

Dashboard widgets: Built summary widgets showing sales pipeline status and meeting activity, giving sales team members an at-a-glance view of their pipeline without navigating deep into the app.

Google Calendar integration: Added the ability for users to schedule client meetings directly from SOLE and send Google Calendar invitations, reducing the context-switching between the CRM and calendar apps.

Technical Focus

CRM apps live or die on workflow efficiency - a feature is only valuable if it reduces friction for the field user. The calendar integration was designed to keep users in one app rather than bouncing between tools, which directly increased adoption of the meeting scheduling features.