<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>GC Notes</title><description>Long-form technical writing about how the web actually works, with the demos running on the page instead of described in prose.</description><link>https://gcweb.pages.dev</link><language>en-us</language><copyright>© 2026 Gaurav Chavhan</copyright><item><title>JWT authentication, and when to use stored tokens instead</title><link>https://gcweb.pages.dev/blog/jwt-authentication</link><guid isPermaLink="true">https://gcweb.pages.dev/blog/jwt-authentication</guid><description>Session tokens need a database lookup on every request. JWTs avoid it—but trading one cost for another. How to choose between them.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><category>auth</category><category>jwt</category><category>cookies</category></item><item><title>Contrast is measured, and your borders have to pass it too</title><link>https://gcweb.pages.dev/blog/measuring-color-contrast</link><guid isPermaLink="true">https://gcweb.pages.dev/blog/measuring-color-contrast</guid><description>#767676 on white passes at 4.54:1 and #777777 fails at 4.47:1. Contrast as a number instead of a judgment, and the criterion covering borders and focus rings.</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><category>css</category><category>tutorial</category></item><item><title>What it took to retrofit accessibility onto a shipped app</title><link>https://gcweb.pages.dev/blog/retrofitting-accessibility</link><guid isPermaLink="true">https://gcweb.pages.dev/blog/retrofitting-accessibility</guid><description>WAVE, axe, NVDA, VoiceOver, 400% zoom and a codebase scanner, run against an app that already thought it was accessible. What each one caught.</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><category>html</category><category>keyboard</category><category>aria</category></item><item><title>What you give up when you use a div instead of a button</title><link>https://gcweb.pages.dev/blog/div-instead-of-button</link><guid isPermaLink="true">https://gcweb.pages.dev/blog/div-instead-of-button</guid><description>A clickable div and a real button look identical. Here is every behavior the browser stops handing you, and what it costs to write back.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><category>html</category><category>keyboard</category><category>aria</category></item></channel></rss>