<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ehsan Shahid — Blog</title><description>Notes on full stack development by Ehsan Shahid — React, Next.js, Astro, Node.js, TypeScript, auth, DevOps, and lessons from shipping production software.</description><link>https://blog.developerehsan.com/</link><language>en-us</language><item><title>Building a CRT-terminal portfolio with React 19 and vite-react-ssg</title><link>https://blog.developerehsan.com/building-a-crt-terminal-portfolio/</link><guid isPermaLink="true">https://blog.developerehsan.com/building-a-crt-terminal-portfolio/</guid><description>How I built a fully prerendered, horizontally-scrolling terminal-themed portfolio with React 19 and vite-react-ssg — and the constraints that shaped every decision, from direct DOM mutation to sr-only crawler mirrors.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate><category>react</category><category>ssg</category><category>typescript</category><category>seo</category><category>frontend</category></item><item><title>JWT refresh-token rotation and RBAC, the boring-but-correct way</title><link>https://blog.developerehsan.com/jwt-refresh-rotation-and-rbac/</link><guid isPermaLink="true">https://blog.developerehsan.com/jwt-refresh-rotation-and-rbac/</guid><description>Access tokens leak. Refresh tokens live for weeks. Rotation with reuse detection is what stops a stolen token from becoming a permanent backdoor — here&apos;s how I built it in MERN Notes, and how RBAC layers cleanly on top.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>auth</category><category>backend</category><category>postgresql</category><category>typescript</category><category>security</category></item><item><title>What shipping at 5 companies in under 2 years actually taught me</title><link>https://blog.developerehsan.com/five-companies-two-years/</link><guid isPermaLink="true">https://blog.developerehsan.com/five-companies-two-years/</guid><description>Restaurant SaaS, a dating app in two weeks, a five-year-old CRA migration, and leading a startup&apos;s frontend. The concrete, unglamorous lessons from moving fast across very different codebases.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>career</category><category>frontend</category><category>fullstack</category></item></channel></rss>