<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Web on Benny Simmonds</title>
    <link>https://www.bencode.io/categories/web/</link>
    <description>Recent content in Web on Benny Simmonds</description>
    <generator>Hugo -- 0.149.1</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 01 Dec 2025 17:45:00 +1100</lastBuildDate>
    <atom:link href="https://www.bencode.io/categories/web/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Shadcn UI Quick Reference</title>
      <link>https://www.bencode.io/posts/shadcn/</link>
      <pubDate>Mon, 01 Dec 2025 17:45:00 +1100</pubDate>
      <guid>https://www.bencode.io/posts/shadcn/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wat&#34;&gt;wat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#componentsjson&#34;&gt;components.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-cn-helper&#34;&gt;The &lt;code&gt;cn()&lt;/code&gt; Helper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#globalscss--theming&#34;&gt;globals.css &amp;amp; Theming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dark-mode&#34;&gt;Dark Mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dependencies-explained&#34;&gt;Dependencies Explained&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#cva-example&#34;&gt;CVA Example&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#blocks-vs-components&#34;&gt;Blocks vs Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#quick-start-workflow&#34;&gt;Quick Start Workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forms-with-tanstack--shadcnui&#34;&gt;Forms with TanStack + shadcn/ui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#claude-code--mcp-tips&#34;&gt;Claude Code + MCP Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#essential-commands&#34;&gt;Essential Commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mental-model&#34;&gt;Mental Model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;wat&#34;&gt;wat&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;shadcn/ui is a set of beautifully-designed, accessible components and a code distribution platform. Works with your favorite frameworks and AI models. Open Source. Open Code.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;componentsjson&#34;&gt;components.json&lt;/h2&gt;
&lt;p&gt;Controls how CLI installs components, paths, and styling preferences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pro CSS</title>
      <link>https://www.bencode.io/posts/procss/</link>
      <pubDate>Sat, 10 May 2025 17:55:56 +1000</pubDate>
      <guid>https://www.bencode.io/posts/procss/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#modern-css-fundamentals&#34;&gt;Modern CSS Fundamentals&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#baseline&#34;&gt;Baseline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#progressive-enhancement&#34;&gt;Progressive Enhancement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#logical-properties-and-values&#34;&gt;Logical properties and values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#css-reset&#34;&gt;CSS Reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#css-cascade-layers&#34;&gt;CSS Cascade Layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#css-custom-properties-variables&#34;&gt;CSS Custom Properties (variables)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#colors&#34;&gt;Colors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#typography&#34;&gt;Typography&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#media-queries-and-custom-properties&#34;&gt;Media queries and custom properties&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structured-custom-properties&#34;&gt;Structured custom properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#base-styles&#34;&gt;Base styles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#meaningful-links&#34;&gt;Meaningful links&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#big-picture-design-system&#34;&gt;Big picture design system&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#wrappers&#34;&gt;Wrappers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#modifiers&#34;&gt;Modifiers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#option-1-bem-approach&#34;&gt;Option 1: BEM approach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-2-data-attributes&#34;&gt;Option 2: Data attributes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#landmark-regions&#34;&gt;Landmark regions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#gems&#34;&gt;Gems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;modern-css-fundamentals&#34;&gt;Modern CSS Fundamentals&lt;/h2&gt;
&lt;h3 id=&#34;baseline&#34;&gt;Baseline&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://web-platform-dx.github.io/web-features/&#34;&gt;Baseline&lt;/a&gt; features are ones that are supported by all the major browsers (Chrome, Edge, Safari, and Firefox). Both the &lt;a href=&#34;https://developer.mozilla.org/en-US/&#34;&gt;MDN web docs&lt;/a&gt; and &lt;a href=&#34;https://caniuse.com/&#34;&gt;caniuse&lt;/a&gt; show when a feature has reached either the Newly available or Widely available threshold.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redux</title>
      <link>https://www.bencode.io/posts/redux/</link>
      <pubDate>Wed, 29 Apr 2020 12:04:16 +0000</pubDate>
      <guid>https://www.bencode.io/posts/redux/</guid>
      <description>&lt;p&gt;Once you start working with &lt;a href=&#34;https://www.bencode.io/posts/react/&#34;&gt;React&lt;/a&gt; in anger, there is a tipping point to be aware of where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the complexity of data flows piles up&lt;/li&gt;
&lt;li&gt;the same data is being rendered in multiple places&lt;/li&gt;
&lt;li&gt;the number of state changes blow out&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Being able to tackle these problems in a single place is where Redux fits in.&lt;/p&gt;
&lt;h1 id=&#34;contents&#34;&gt;Contents&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#contents&#34;&gt;Contents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-problem&#34;&gt;The Problem&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#option-1-lift-the-state&#34;&gt;Option 1 lift the state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-2-react-context&#34;&gt;Option 2 react context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#option-3-redux&#34;&gt;Option 3 Redux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a-chat-with-redux&#34;&gt;A chat with redux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#container-vs-presentation-components&#34;&gt;Container vs Presentation Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-redux-principles&#34;&gt;The Redux Principles&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#actions&#34;&gt;Actions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-store&#34;&gt;The Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#immutability&#34;&gt;Immutability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reducers&#34;&gt;Reducers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-redux&#34;&gt;React-Redux&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#react-redux-provider&#34;&gt;React-Redux Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-redux-connect&#34;&gt;React-Redux Connect&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#mapstatetoprops&#34;&gt;mapStateToProps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mapdispatchtoprops&#34;&gt;mapDispatchToProps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#redux-setup&#34;&gt;Redux Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#async-and-apis&#34;&gt;Async and APIs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#mock-api&#34;&gt;Mock API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#api-client-wrappers&#34;&gt;API Client Wrappers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#redux-middleware&#34;&gt;Redux Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#redux-async-libraries&#34;&gt;Redux Async Libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#thunks&#34;&gt;Thunks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#conditional-mapstatetoprops&#34;&gt;Conditional mapStateToProps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#polish-the-finer-things&#34;&gt;Polish (the finer things)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#spinner-component&#34;&gt;Spinner component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#status-api-and-feedback&#34;&gt;Status API and feedback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#server-side-validation&#34;&gt;Server side validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#client-side-validation&#34;&gt;Client side validation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#optimistic-deletes&#34;&gt;Optimistic deletes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#testing&#34;&gt;Testing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#redux-connected-components&#34;&gt;Redux Connected Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#action-creators&#34;&gt;Action Creators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#thunks-1&#34;&gt;Thunks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#reducers-1&#34;&gt;Reducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#store&#34;&gt;Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;the-problem&#34;&gt;The Problem&lt;/h1&gt;
&lt;p&gt;Imagine a fairly deep component hierarchy, starting with your top level &lt;code&gt;App&lt;/code&gt; component. Deep down the tree, there are two child components that need to access a common piece of data (e.g. customer data). How should these components access the data they require?&lt;/p&gt;</description>
    </item>
    <item>
      <title>React v19</title>
      <link>https://www.bencode.io/posts/react/</link>
      <pubDate>Sun, 05 May 2019 22:08:10 +1000</pubDate>
      <guid>https://www.bencode.io/posts/react/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#react&#34;&gt;React&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#react-no-frills&#34;&gt;React No Frills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tools&#34;&gt;Tools&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#npm&#34;&gt;npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#prettier&#34;&gt;Prettier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#eslint&#34;&gt;ESLint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#vite&#34;&gt;Vite&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#vite-proxy&#34;&gt;Vite Proxy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#typescript&#34;&gt;TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bleeding-edge-and-alternative-tools&#34;&gt;Bleeding Edge and Alternative Tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#jsx&#34;&gt;JSX&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#dom-control&#34;&gt;DOM control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#styling&#34;&gt;Styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#rendering-lists&#34;&gt;Rendering Lists&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#handling-events&#34;&gt;Handling Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#passing-parameters-to-event-handlers&#34;&gt;Passing Parameters to Event Handlers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#passing-jsx-as-props&#34;&gt;Passing JSX as Props&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-hooks&#34;&gt;React Hooks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#usestate&#34;&gt;useState&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#useeffect&#34;&gt;useEffect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#custom-hooks&#34;&gt;Custom Hooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#usecontext&#34;&gt;useContext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#useref&#34;&gt;useRef&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#forms-and-user-input&#34;&gt;Forms and User Input&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#push-cart-to-server&#34;&gt;Push Cart to Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#react-ecosystem&#34;&gt;React Ecosystem&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#tanstack-router&#34;&gt;TanStack Router&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#vite-setup&#34;&gt;Vite Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#routetreegents&#34;&gt;routeTree.gen.ts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#router-setup&#34;&gt;Router Setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tanstack-query&#34;&gt;TanStack Query&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#resources&#34;&gt;Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;react&#34;&gt;React&lt;/h2&gt;
&lt;p&gt;React is a JavaScript &lt;em&gt;library&lt;/em&gt; for building component based interactive UI&amp;rsquo;s.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
