IntersectionObserver infinite scroll hook

Scroll listeners are easy to get wrong and they can cause performance issues on long lists. IntersectionObserver lets the browser do the hard work: I put a sentinel div at the bottom of the list and trigger fetchNextPage when it becomes visible. I als

OpenAPI generation for REST endpoints

API docs shouldn’t be a wiki page that drifts from reality. I generate an OpenAPI spec from code-adjacent definitions so changes get reviewed alongside implementation. The frontend benefits too: typed clients, mock servers, and even contract tests bec

DOM manipulation best practices and performance optimization

DOM manipulation modifies HTML structure using JavaScript methods like createElement(), appendChild(), and removeChild(). I minimize reflows by batching DOM changes together. Using DocumentFragment groups multiple changes before inserting into DOM. Th

Accessible modal dialogs with Stimulus and ARIA

Modals are everywhere but often fail accessibility requirements. I build modals with Stimulus that properly manage focus, support keyboard navigation, and announce themselves to screen readers. When opened, focus moves to the modal and gets trapped in

Exception handling with @ControllerAdvice

Global exception handling in Spring uses @ControllerAdvice to centralize error responses across all controllers. I define @ExceptionHandler methods for specific exceptions, returning consistent error DTOs with HTTP status codes. Custom exceptions exte

App Store submission and TestFlight beta testing

Submitting to the App Store requires careful preparation and compliance with Apple's guidelines. I configure app metadata in App Store Connect—screenshots, descriptions, keywords, categories. The build must be archived with a distribution certificate

Spring Data JPA repository patterns

Spring Data JPA eliminates boilerplate DAO code with repository interfaces. I extend JpaRepository to get CRUD methods automatically—save, findById, findAll, delete. Custom query methods use method naming conventions—findByEmailAndActiveTrue generates

Image caching with NSCache and async loading

Loading images from URLs requires caching to avoid redundant network calls and improve performance. I create an image cache using NSCache which automatically evicts objects under memory pressure. The cache stores UIImage or Data keyed by URL. For asyn

Vite env handling: explicit prefixes only

Leaking secrets into the browser bundle is an easy mistake. Vite only exposes env vars with the VITE_ prefix, and I keep that rule strict. I also define a small typed wrapper so components don’t read import.meta.env directly everywhere. The wrapper gi

Laravel database seeders for test data

Seeders populate databases with test or initial data. I create seeder classes in database/seeders with a run() method. The DatabaseSeeder orchestrates other seeders. For large datasets, I use factories with factory()->count(100)->create() for pe

Blocks, Procs, and Lambdas for functional programming

Ruby's closures—blocks, procs, lambdas—enable functional programming patterns. Blocks are anonymous code chunks passed to methods. Procs are objects wrapping blocks, callable with call. Lambdas are stricter procs—check argument count and return differ

SSL/TLS certificates with Lets Encrypt and cert-manager

TLS certificates encrypt traffic between clients and servers. Let's Encrypt provides free, automated certificates via the ACME protocol. In Kubernetes, cert-manager automates certificate issuance and renewal. A ClusterIssuer configures the ACME server