<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tan Nguyen - Staff Software Engineer</title><description>Tan Nguyen - Staff Software Engineer with 10+ years building high-scale, high-impact web and mobile products. Specialized in TypeScript (React &amp; React Native), micro-frontends (Module Federation), performance, and developer productivity.</description><link>https://ryenguyen.dev/</link><item><title>Neovim, QMK, and the Tooling That Eliminated the Mouse for Me ⌨️</title><link>https://ryenguyen.dev/blog/neovim-qmk-keyboard-first-workflow/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/neovim-qmk-keyboard-first-workflow/</guid><description>A keyboard-first workflow isn’t about being faster—it’s about staying in flow. Here’s the stack (Neovim, QMK, terminal tools, browser keybindings, and a bit of OS glue) that steadily removed small interruptions from my day.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><category>neovim</category><category>qmk</category><category>tooling</category><category>ergonomics</category><category>productivity</category></item><item><title>Micro-frontends at Scale: Module Federation + Shadow DOM Isolation (What Actually Worked)</title><link>https://ryenguyen.dev/blog/micro-frontends-module-federation-shadow-dom/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/micro-frontends-module-federation-shadow-dom/</guid><description>A pragmatic isolation model for micro-frontends: clean CSS/DOM boundaries with Shadow DOM, shared dependency strategy with Module Federation, common failure modes, and the platform guardrails that made it sustainable.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><category>architecture</category><category>micro-frontends</category><category>module-federation</category><category>platform</category><category>frontend</category></item><item><title>CI/CD for Micro-App Fleets: Saving ~1,500 Hours/Year Without Slowing Devs Down</title><link>https://ryenguyen.dev/blog/cicd-for-micro-app-fleets-saving-time/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/cicd-for-micro-app-fleets-saving-time/</guid><description>How we standardized pipelines for a micro-app fleet: aggressive (but safe) caching, parallelization, preview environments, and release guardrails-plus the metrics that proved we saved real engineering time.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>cicd</category><category>platform</category><category>devops</category><category>micro-frontends</category><category>frontend</category></item><item><title>How I Consolidated 12 Internal Portals into One BizOps Platform</title><link>https://ryenguyen.dev/blog/consolidating-portals-into-bizops-platform/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/consolidating-portals-into-bizops-platform/</guid><description>A playbook for consolidating fragmented internal tools: how we sliced domains, migrated incrementally without stopping feature work, built shared foundations (design system + platform APIs), and kept stakeholders aligned.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>platform</category><category>architecture</category><category>frontend</category><category>product</category><category>leadership</category></item><item><title>Expo/React Native Multi-Tenant Architecture: Shipping Mobile + Web with One Product Brain</title><link>https://ryenguyen.dev/blog/expo-react-native-multi-tenant-architecture/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/expo-react-native-multi-tenant-architecture/</guid><description>A practical multi-tenant architecture for Expo + React Native: typed configuration, feature flags, tenant theming, module boundaries, EAS build/release pipelines, and how to keep one product logic across mobile and web.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>react-native</category><category>expo</category><category>architecture</category><category>multi-tenant</category><category>platform</category></item><item><title>Frontend Platform RFCs That Improved DX (Without Blocking Teams)</title><link>https://ryenguyen.dev/blog/frontend-platform-rfcs-improved-dx/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/frontend-platform-rfcs-improved-dx/</guid><description>How lightweight RFCs and decision records helped us ship better defaults-app templates, CI pipelines, and runtime validation boundaries - while keeping teams moving fast.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>platform</category><category>dx</category><category>process</category><category>typescript</category><category>frontend</category></item><item><title>Security Work in the Frontend: PII Masking, Audit Logging, and Permission Surfaces</title><link>https://ryenguyen.dev/blog/frontend-security-pii-masking-audit-logging-acl/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/frontend-security-pii-masking-audit-logging-acl/</guid><description>Frontend security isn’t just hiding buttons. Here’s a threat-model-driven approach: role-based PII masking, leak-proof logs/analytics, explainable permission UX, and audit events you can trust.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>security</category><category>frontend</category><category>privacy</category><category>platform</category><category>architecture</category></item><item><title>Performance as a Product Feature: Reaching ~95 Lighthouse and Real SEO Gains</title><link>https://ryenguyen.dev/blog/performance-as-product-feature-lighthouse-seo/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/performance-as-product-feature-lighthouse-seo/</guid><description>Performance isn’t a cleanup task - it’s a product decision. Here’s the workflow we used to move Lighthouse into the ~95 range and improve real-world Core Web Vitals: budgets, profiling, hydration/JS cost, images, and indexing implications.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>seo</category><category>web</category><category>lighthouse</category><category>frontend</category></item><item><title>WebSocket Clients Under Load: Keeping the UI Stable at 1,000+ Messages/Second</title><link>https://ryenguyen.dev/blog/websocket-clients-under-load-ui-stability/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/websocket-clients-under-load-ui-stability/</guid><description>Real-time UIs fail in predictable ways under load. Here’s the architecture that kept our app responsive: backpressure, buffering, rAF batching, state separation, reconnect/resume, and instrumentation.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>websockets</category><category>react</category><category>architecture</category><category>frontend</category></item><item><title>TypeScript Type System Tricks I Wish I Knew Earlier</title><link>https://ryenguyen.dev/blog/typescript-type-system-tricks/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/typescript-type-system-tricks/</guid><description>Advanced TypeScript patterns I&apos;ve learned from 8+ years in production - conditional types, template literals, and type-safe APIs that actually scale.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><category>typescript</category><category>frontend</category><category>dx</category></item><item><title>Runtime Safety in React/TypeScript: Branded Types + Validation Boundaries</title><link>https://ryenguyen.dev/blog/typescript-branded-types-runtime-safety/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/typescript-branded-types-runtime-safety/</guid><description>Where static types end and runtime bugs begin: branded types, parsing at boundaries, safer API contracts, and an error taxonomy that holds up in large React/TypeScript codebases.</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><category>typescript</category><category>react</category><category>runtime-safety</category><category>architecture</category><category>frontend</category></item><item><title>8 Lessons from 8 Years as a Frontend Engineer</title><link>https://ryenguyen.dev/blog/lessons-from-8-years-as-frontend-engineer/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/lessons-from-8-years-as-frontend-engineer/</guid><description>Hard-earned wisdom from shipping products at Vietnamese startups and scale-ups. The things I wish someone told me when I started.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><category>career</category><category>frontend</category><category>lessons</category><category>engineering</category></item><item><title>From Monolith to Micro-Frontends: Lessons from the Trenches</title><link>https://ryenguyen.dev/blog/from-monolith-to-micro-frontends/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/from-monolith-to-micro-frontends/</guid><description>A candid look at what it&apos;s really like to break a React monolith into micro-frontends - the wins, the regrets, and what I&apos;d do differently next time.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><category>architecture</category><category>micro-frontends</category><category>react</category><category>frontend</category></item><item><title>Hello World - Welcome to My Blog</title><link>https://ryenguyen.dev/blog/hello-world/</link><guid isPermaLink="true">https://ryenguyen.dev/blog/hello-world/</guid><description>An introduction to my blog where I&apos;ll be sharing thoughts on web development, React, and software engineering.</description><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate><category>announcement</category><category>personal</category></item></channel></rss>