- Terraform – Variables, Locals and Outputs
One configuration, many environments. Typed input variables and why you should always declare the type, `validation` blocks that reject a bad value at plan time, `sensitive` and what it does and does not hide, `.tfvars` files, the full precedence order when the same variable is set four ways, locals, and outputs.
- React Native – Storing Data on the Device
There is no `localStorage`, and that turns out to be an improvement. `AsyncStorage` for what is inconvenient to lose, `expo-secure-store` — the iOS Keychain and Android EncryptedSharedPreferences — for anything an attacker could use. Both are asynchronous, which is why an app that reads a token on launch needs an `initialising` state and a splash screen that waits for it.
- Spring Security – How Authentication Works
The filter chain, AuthenticationManager, UserDetailsService and the SecurityContext — the four pieces everything else in Spring Security is built on. Password hashing with BCrypt, and why a login failure should be deliberately vague about which half of the credentials was wrong.
- TypeScript – Interfaces vs Type Aliases
They overlap almost completely, which is why the question keeps coming up. The three real differences — declaration merging, what each can name, and the error messages you get back — and the rule this app follows: interface for a shape with a name, type for everything a shape cannot express.
- NestJS – DTOs and Validation
class-validator, the global ValidationPipe, and the failure mode that ships more often than any other in Nest: an app with beautifully annotated DTOs and no global pipe is completely unvalidated, and nothing about it looks wrong. Plus whitelist, forbidNonWhitelisted, and why the response DTO is a separate idea from the request one.