Improving an existing app

Lulu already existed when I started. I introduced modular feature boundaries and moved server data onto TanStack Query, which handles fetching, caching, loading and error states, synchronisation, and pagination in one consistent way instead of each screen managing its own requests.

Two ways to pay, one source of truth

Learners can pay in two different ways, and treating them as the same thing would have caused bugs.

In-app purchases compared with externally initiated payments
PathHow it worksWhat I had to get right
In-app purchaseThe learner buys inside the app through the platform’s store on Android or iOSA consistent purchase experience on both platforms that follows Apple’s in-app purchase rules
Payment made on the webThe learner pays outside the app, the backend confirms the payment and records the entitlement, and the app reads that entitlementMobile access reflects confirmed payments, with the backend as the single source of truth instead of the device

Keeping the backend as the source of truth means a learner who pays on the web gets the same access on their phone, and the app never grants access based only on what the device believes.

Quality and support

I wrote Jest tests, did manual QA, and wrote tester documentation so others could repeat the checks. I also debugged production issues and resolved defects reported against the live app.

Status

Lulu is live on Google Play.

Back to top