{"version":"1.0","type":"rich","provider_name":"Acast","provider_url":"https://acast.com","height":250,"width":700,"html":"<iframe src=\"https://embed.acast.com/$/65de32896569fa0017d17653/692d8b15f8e2c46a8ceb88f9?\" frameBorder=\"0\" width=\"700\" height=\"250\"></iframe>","title":"Poison Pills (with Joel Hawksley)","description":"<p>In this episode, GitHub engineer Joel Hawksley breaks down the evolution of GitHub’s UI architecture—from Rails views to ViewComponent to React—and the tradeoffs behind each step. ViewComponent emerged as a practical, backwards-compatible way to eliminate duplicated UI logic in GitHub’s massive Rails monolith, ultimately supporting thousands of components and becoming a key driver of consistency and accessibility. Joel explains how hard UI correctness is compared to backend systems, how keyboard-only tests surfaced real accessibility regressions, and why ViewComponent v4 streamlines the project as it enters a stable, long-term support phase. He also discusses why GitHub increasingly leans on React for complex, app-like behavior: developer enthusiasm, design-system tooling, CSS encapsulation, and the need to manage frontend–backend sync at scale. The conversation closes with reflections on the realities of open-source maintenance and the importance of stability as ViewComponent’s future.</p><p><br></p><p><strong>Links:</strong></p><p><br></p><p><a href=\"https://hawksley.org\" rel=\"noopener noreferrer\" target=\"_blank\">Joel Hawksley’s Website</a></p><p><a href=\"https://viewcomponent.org\" rel=\"noopener noreferrer\" target=\"_blank\">ViewComponent Website</a></p><p><a href=\"https://github.com/ViewComponent/view_component\" rel=\"noopener noreferrer\" target=\"_blank\">ViewComponent GitHub Repo</a></p><p><a href=\"https://primer.style/view-components/\" rel=\"noopener noreferrer\" target=\"_blank\">Primer ViewComponents</a></p><p><a href=\"https://github.com/primer/view_components\" rel=\"noopener noreferrer\" target=\"_blank\">Primer ViewComponents Repo</a></p><p><a href=\"https://www.phlex.fun\" rel=\"noopener noreferrer\" target=\"_blank\">Phlex Website</a></p><p><a href=\"https://github.com/joeldrapper/phlex\" rel=\"noopener noreferrer\" target=\"_blank\">Phlex GitHub Repo</a></p><p><a href=\"https://github.com/marcoroth/herb\" rel=\"noopener noreferrer\" target=\"_blank\">Herb GitHub Repo</a></p><p><a href=\"https://github.com/marcoroth/re-actionview\" rel=\"noopener noreferrer\" target=\"_blank\">ReActionView GitHub Repo</a></p><p><a href=\"https://www.w3.org/WAI/standards-guidelines/wcag/\" rel=\"noopener noreferrer\" target=\"_blank\">WCAG Accessibility Standards</a></p><p><a href=\"https://guides.rubyonrails.org/action_view_overview.html#strict-locals\" rel=\"noopener noreferrer\" target=\"_blank\">Rails Strict Locals Documentation</a></p><p><br></p><p><strong>Dead Code Podcast Links:</strong></p><p><br></p><p><a href=\"https://hachyderm.io/@deadcode\" rel=\"noopener noreferrer\" target=\"_blank\">Mastodon</a></p><p><a href=\"https://twitter.com/DeadCodePod\" rel=\"noopener noreferrer\" target=\"_blank\">X</a></p><p><br></p><p><strong>Jared’s Links:</strong></p><p><br></p><p><a href=\"https://supergood.social/@jared\" rel=\"noopener noreferrer\" target=\"_blank\">Mastodon</a></p><p><a href=\"https://twitter.com/jardonamron\" rel=\"noopener noreferrer\" target=\"_blank\">X</a></p><p><a href=\"https://www.twitch.tv/jardonamron\" rel=\"noopener noreferrer\" target=\"_blank\">twitch.tv/jardonamron</a></p><p><a href=\"https://jardo.dev\" rel=\"noopener noreferrer\" target=\"_blank\">Jared’s Newsletter &amp; Website</a></p><p><br></p><p><a href=\"https://docs.google.com/document/d/1RgeLadwr0BpImeExS6x5C-m5Cqq-g3JI1BQXWsn-Vv4/edit?tab=t.0\" rel=\"noopener noreferrer\" target=\"_blank\">Episode Transcript</a></p><p><br></p>","author_name":"Jared Norman"}