- iOS – Persistence, UserDefaults and the Keychain
Where each thing belongs and why the split is a security decision, not a convenience one. UserDefaults for preferences, the Keychain for a session token, the accessibility class that actually matters, and why the Security API makes you write save as delete-then-add. Plus what SwiftData is for.
- TypeScript – tsconfig, the Flags That Matter
Most of tsconfig you set once. These are the ones that change what compiles: the strict family one flag at a time, target and lib and how they differ, moduleResolution, noEmit, erasableSyntaxOnly, and path aliases. Read off the two real configs in this app — which disagree with each other, correctly.
- NestJS – Authorization and Roles
Role-based access with @Roles and a RolesGuard, and the harder half nobody shows: ownership. Why the role never comes from a request body, why a foreign resource returns 404 rather than 403, and why the route whose rules depend on the row deliberately has no @Roles decorator at all.
- Android – Forms, Text Input and Validation
The keyboard is part of your UI. KeyboardOptions and IME actions, moving focus between fields, input filtering, imePadding so the button is not hidden, error semantics for TalkBack, and a validation model that keeps the rules out of the composable and testable on the JVM.
- iOS – Dependency Injection Without a Framework
A composition root — one initialiser that decides every concrete type the app runs with — instead of singletons scattered through it. Why a static shared is a testing problem before it is a design problem, injecting through the SwiftUI environment, and the constructor parameter that turns an ordering rule into a compiler guarantee.