<?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>Webdev on Benny Simmonds</title>
    <link>https://www.bencode.io/categories/webdev/</link>
    <description>Recent content in Webdev 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/webdev/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>Vue</title>
      <link>https://www.bencode.io/posts/vue/</link>
      <pubDate>Thu, 02 Mar 2023 20:45:36 +1100</pubDate>
      <guid>https://www.bencode.io/posts/vue/</guid>
      <description>&lt;p&gt;A bunch of (scattered) tips and resources as I experiment with Vue.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Basics: &lt;a href=&#34;#general-wisdom&#34;&gt;&lt;code&gt;General wisdom&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#anatomy&#34;&gt;&lt;code&gt;Anatomy&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#events&#34;&gt;&lt;code&gt;Eventhandling&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#watchers&#34;&gt;&lt;code&gt;Watchers&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#computed&#34;&gt;&lt;code&gt;Computed props&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Components: &lt;a href=&#34;#components&#34;&gt;&lt;code&gt;Components&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#props&#34;&gt;&lt;code&gt;Props&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#lifecycle-hooks&#34;&gt;&lt;code&gt;Lifecycle hooks&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#emitting-events&#34;&gt;&lt;code&gt;Emitting events&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#slots&#34;&gt;&lt;code&gt;Slots&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fetching Data: &lt;a href=&#34;#fetching-data&#34;&gt;&lt;code&gt;Calling APIs in hooks&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#unique-identifiers&#34;&gt;&lt;code&gt;Unique identifiers&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Styling Components: &lt;a href=&#34;#styling&#34;&gt;&lt;code&gt;Global vs scoped styles&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#css-modules&#34;&gt;&lt;code&gt;CSS modules&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#css-v-bind&#34;&gt;&lt;code&gt;CSS v-bind&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Composition API: &lt;a href=&#34;#composition-api&#34;&gt;&lt;code&gt;Composition API&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#reactive-refs&#34;&gt;&lt;code&gt;Reactive references&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#script-setup&#34;&gt;&lt;code&gt;script setup&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#composables&#34;&gt;&lt;code&gt;Composables&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Routing and Deployment: &lt;a href=&#34;#vue-router&#34;&gt;&lt;code&gt;Vue Router&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#history&#34;&gt;&lt;code&gt;History&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#dynamic-routes&#34;&gt;&lt;code&gt;Dynamic routes&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#deployment&#34;&gt;&lt;code&gt;Deployment&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Advanced: &lt;a href=&#34;#preprocessors&#34;&gt;&lt;code&gt;Pre-processors&lt;/code&gt;&lt;/a&gt; &lt;a href=&#34;#pinia-state-management&#34;&gt;&lt;code&gt;Pinia State Management&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;What is Vue?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;an open-source model–view–viewmodel front end JavaScript framework for building user interfaces and single-page applications, created by Evan You&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Helpful resouces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://vuejs.org/guide/quick-start.html#using-vue-from-cdn&#34;&gt;Read the offical docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vuejs.org/examples/#hello-world&#34;&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://boussadjra.github.io/vue-cheat-sheet/guide/&#34;&gt;Vue cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/vuejs/awesome-vue&#34;&gt;Awesome Vue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=en&#34;&gt;Vue.js devtools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Vue.volar&#34;&gt;Volar VSCode extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://vuejs.org/api/built-in-directives.html&#34;&gt;Built-in Directives&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;general-wisdom&#34;&gt;General wisdom&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s best to stick to conventions of the web and use &lt;code&gt;camelCase&lt;/code&gt; in your script and &lt;code&gt;kebab-case&lt;/code&gt; in your template&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t pass functions as &lt;code&gt;props&lt;/code&gt;, instead &lt;code&gt;emit&lt;/code&gt; events&lt;/li&gt;
&lt;li&gt;&lt;code&gt;props&lt;/code&gt; couples components to each other, for broad or deep cross cutting state, level up to state management&lt;/li&gt;
&lt;li&gt;Test data sources: &lt;a href=&#34;https://jsonplaceholder.typicode.com/&#34;&gt;JSON Placeholder&lt;/a&gt; &lt;a href=&#34;https://pokeapi.co/&#34;&gt;PokeAPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;anatomy&#34;&gt;Anatomy&lt;/h2&gt;
&lt;p&gt;Here is a bare bones vue app. There are literally 3 blocks for &lt;code&gt;script&lt;/code&gt;, &lt;code&gt;template&lt;/code&gt; (markup) and &lt;code&gt;style&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
