Derrick Cheng project mode
project/01Expo / React Native App / 2026

TrackWize

An offline-first MYR expense tracker built for everyday budgeting and private financial planning.

RoleMobile App Development StackReact Native, Expo, SQLite, TypeScript
src/trackwize/preview interactive / demo Open app

The real TrackWize Expo app, exported for the web and running in your browser with fictional sample data. Nothing leaves this page.

React Native, Expo, SQLite, device utilities, and a focused mobile-first design system.

TrackWize is an offline-first MYR expense tracker with transactions, budgets, utilities, analytics, backup tools, app lock, and private local data.

01
Year
2026
02
Technology
React Native, Expo, TypeScript, SQLite, React Navigation, EAS Build

What I worked on

Built an Expo / React Native app with a clear monthly overview for income, spending, and remaining balance.

Implemented local SQLite storage for transactions, categories, budgets, utilities, analytics, and backup flows.

Added practical mobile safeguards including app lock, biometric support, private local data, and offline-first behaviour.

Release dashboard

A private web console, built on Vercel and Supabase (Auth, Postgres, Storage), that I use to publish signed TrackWize Android APK releases and in-app announcements. It never receives or stores users' financial records.

How a release goes out

  1. 01
    Upload a draft

    Upload a signed APK as a draft. Its SHA-256 checksum is computed in the browser (up to 100 MB).

  2. 02
    Test on a device

    Download the draft and test it on a phone before anyone else can see it.

  3. 03
    Publish to users

    Confirm “Publish to users”. One release is active at a time and the previous notice is archived.

  4. 04
    The app checks in

    TrackWize calls the public /api/announcement endpoint only when it opens or returns to the foreground, then shows the update receipt pop-up (installed version to new version).

  5. 05
    Users choose

    People decide whether to download and install the update.

What the console does

  • Live-on-phones overview and Next up.
  • Draft-first releases: publish, unpublish, download and delete.
  • Release history marked Live, Draft or Earlier, with search and filters.
  • Standalone announcements: create, edit, archive, restore and delete; information-only or an HTTPS link, with a display count and a phone-notification preview.
  • Storage page listing every APK file and any leftovers, deletable singly or in bulk.
  • Mobile endpoint health check.
  • Session refresh and sign-in recovery.
  • The same 3.0 receipt look as the app, in light and dark.

Security

Supabase Auth plus an admins table and row-level security decide who can change anything. The browser holds only the public anon key; the service-role key lives only in the Vercel API. Content is escaped and links must be HTTPS.

Vanilla JS (ES modules)Supabase (Auth, Postgres, Storage)Vercel serverless API
Read-only demo · sample releases release / console Open dashboard

The real console front end running on sample data. Every write is blocked and nothing here connects to a backend.

more work in the index Back to selected work