- Android – Networking with Retrofit and OkHttp
Retrofit interfaces as the API surface, OkHttp interceptors for the token, kotlinx.serialization and the three settings that bite, the base URL from build configuration rather than code, and why plain HTTP to your dev machine fails until you write a network security config.
- iOS – Taking Payments with Stripe
PaymentSheet rather than a card form of your own, and the PCI reason that is not negotiable. The two-step order-then-pay flow and why it has to be two steps, quarantining the SDK behind a protocol so checkout is testable, bridging a completion handler into async, and the dismissed sheet that is not an error.
- TypeScript – With React
Typing props and children, useState where inference is enough and where it is not, useRef's two different types, event handlers, and generic components. Plus the context pattern that removes the `| undefined` every consumer would otherwise have to handle, taken from this app's auth provider.
- NestJS – Testing
Test.createTestingModule, mocking a provider with useValue, and getting the token right — @InjectDataSource does not ask for the class, so overriding the class leaves your test talking to the real database. Then e2e with supertest, and the trap that makes a whole suite pass vacuously: forgetting the global pipe.
- Android – Building a Design System with Material 3
Tokens, a semantic layer and components — and where Material 3's ColorScheme fits in that, where it runs out, and how a CompositionLocal fills the gap. The window theme versus the Compose theme, dynamic colour and why this app turns it off, and a button that prevents the double-submitted order.