Reliability & Error Handling
Integration Resilience
Connect-REST layer with proper error handling so request failures don't cascade into UI crashes. Scoped data pages isolate data fetch failures per component. One external system going down doesn't take out the entire application.
WASM Isolation
SharedArrayBuffer requires COOP/COEP headers that break third-party resources (CDN fonts, analytics, embeds). I scoped these headers to just the /emulator route instead of applying them globally. Containment over convenience. The rest of the app works normally.
Client-side Persistence
Emulator save states persist to IndexedDB, not localStorage. Binary SRAM blobs exceed localStorage's 5MB limit. Page reloads, tab crashes, and browser restarts don't lose progress. Data integrity matters even when there's no server.
Graceful Degradation
If the GitHub API is down, the activity widget just hides. If PokeAPI times out, cached data takes over. External dependency failure never breaks the core experience. Every async boundary has a fallback.