<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>stafford williams</title>
    <description>project-switch dev</description>
    <link>https://staffordwilliams.com/dev/</link>
    <pubDate>Sun, 01 Nov 2026 10:13:19 GMT</pubDate>
    <lastBuildDate>Sun, 01 Nov 2026 10:13:19 GMT</lastBuildDate>
    <generator>Astro</generator>
    <item>
      <title>project-switch: Paprika grocery list in the launcher and CLI</title>
      <description>&lt;p&gt;The launcher picked up its first non-project integration this week: the Paprika shopping list. Adding milk is now ALT+SPACE, &lt;code&gt;grocery milk&lt;/code&gt;, Enter.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;grocery&lt;/code&gt; launcher item to add and remove Paprika grocery items&lt;/li&gt;&lt;li&gt;&lt;code&gt;project-switch grocery&lt;/code&gt; subcommand for Paprika grocery lists&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w43/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w43/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Per-command browser choice, launcher hotkeys, tab completion</title>
      <description>&lt;p&gt;The launcher got faster to drive this week. Favourite commands can be bound to their own key combo, and Tab completes a key before you type arguments. One link can also open under different browser profiles, with the launcher remembering which one you used last.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Per-command &lt;code&gt;hotkey&lt;/code&gt; (e.g. &lt;code&gt;alt+a&lt;/code&gt;, &lt;code&gt;ctrl+shift+1&lt;/code&gt;) that runs the command with one keystroke in the GUI launcher&lt;/li&gt;&lt;li&gt;A command&apos;s &lt;code&gt;browser&lt;/code&gt; can be a list of &lt;code&gt;{label, value}&lt;/code&gt; entries (e.g. one Firefox profile each), picked from a prompt in terminal &lt;code&gt;list&lt;/code&gt; and in the GUI launcher&lt;/li&gt;&lt;li&gt;The last browser picked for each command is remembered in &lt;code&gt;~/.project-switch-browser-choices.yml&lt;/code&gt; and offered first next time&lt;/li&gt;&lt;li&gt;Tab in the GUI launcher completes the input to the highlighted item&apos;s key, ready for typed arguments&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w42/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w42/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Built-in switch item in the launcher</title>
      <description>&lt;p&gt;Switching clients is now built into the launcher instead of needing a config workaround. A &lt;code&gt;switch&lt;/code&gt; row is always in the list and shows where you are. macOS also started honouring per-command browser arguments such as profiles.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Built-in &lt;code&gt;switch&lt;/code&gt; item in every launcher list, showing the active client and project (e.g. &lt;code&gt;apm / web&lt;/code&gt;); in the GUI it opens the client and project picker, in the terminal it runs the &lt;code&gt;switch&lt;/code&gt; prompt&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Config commands that re-invoke &lt;code&gt;project-switch switch&lt;/code&gt; are no longer intercepted and should be removed in favour of the built-in item&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Browser arguments (e.g. a profile flag) are now applied on macOS when the browser is already running, by launching a new instance with &lt;code&gt;open -n&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w40/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w40/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Multiple tray webservers, webview navigation</title>
      <description>&lt;p&gt;The tray can now run several local web UIs side by side, in WSL or natively, each on its own port. Webview commands can also send an already-open window to a specific page without a reload. Along the way, Windows instance cleanup stopped relying on the retired &lt;code&gt;wmic&lt;/code&gt; tool and the launcher got its instant startup back.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;navigate: true&lt;/code&gt; on a webview command sends its URL to an already-open webview window, routing same-origin URLs client-side so single-page apps update without reloading&lt;/li&gt;&lt;li&gt;&lt;code&gt;webservers&lt;/code&gt; list in config: the tray can run several webservers, each with its own submenu, &lt;code&gt;port&lt;/code&gt;, log file and a &lt;code&gt;target&lt;/code&gt; of &lt;code&gt;wsl&lt;/code&gt; or &lt;code&gt;native&lt;/code&gt; (the old single &lt;code&gt;webserver&lt;/code&gt; key still works)&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The GUI launcher moved to eframe 0.36&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The launcher opens instantly from the hotkey again&lt;/li&gt;&lt;li&gt;The webview page gets keyboard focus when the window opens or is brought to the front&lt;/li&gt;&lt;li&gt;Closing earlier instances on Windows uses Win32 APIs instead of &lt;code&gt;wmic&lt;/code&gt;, which is missing on newer Windows builds&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w39/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w39/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: macOS config error dialog</title>
      <description>&lt;p&gt;The macOS launcher now tells you when your config is broken. It shows the error in a dialog you can copy from, as Windows already did.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Config errors in the GUI launcher on macOS now appear in a native dialog with &lt;code&gt;Copy Error&lt;/code&gt; and &lt;code&gt;Open Config&lt;/code&gt; buttons, instead of failing silently&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w37/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w37/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Relevance-ranked launcher matches</title>
      <description>&lt;p&gt;The launcher got better at guessing what you meant. Typing part of a key now ranks the obvious match first, and pressing Enter opens what&apos;s at the top of the list instead of whatever comes first alphabetically.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;start-hotkey.sh&lt;/code&gt; strips &lt;code&gt;CLAUDE*&lt;/code&gt; session variables before starting the tray, so apps launched from it don&apos;t inherit a Claude Code session environment&lt;/li&gt;&lt;li&gt;Launcher matches are ranked exact key first, then prefix, then mid-string, and Enter on a partial match opens the top suggestion shown (typing &lt;code&gt;mer&lt;/code&gt; now gives &lt;code&gt;mercury&lt;/code&gt; before &lt;code&gt;commercials&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w36/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w36/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Client and project picker in the GUI launcher</title>
      <description>&lt;p&gt;Switching clients now works from the hotkey window. Before, the GUI launcher couldn&apos;t run &lt;code&gt;switch&lt;/code&gt; because it needs a terminal, so the launcher now has its own client and project picker that offers the same choices.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A command that runs &lt;code&gt;project-switch switch&lt;/code&gt; now opens a client and project picker inside the GUI launcher instead of trying to start a terminal prompt with no console&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w33/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w33/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Link previews in the Windows webview</title>
      <description>&lt;p&gt;A single fix this week. On Windows the webview again shows where a link goes before you click it, as a normal Edge window does.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Hovering a link in the Windows webview shows its target URL in the bottom-left status strip again&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w31/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w31/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: macOS utility apps in the launcher</title>
      <description>&lt;p&gt;A single fix this week. Apple&apos;s bundled utility apps were missing from the launcher because their folder wasn&apos;t searched. It now is, so Activity Monitor and friends turn up again.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;macOS utilities such as Activity Monitor and Terminal, which live in &lt;code&gt;/System/Applications/Utilities&lt;/code&gt;, now appear in the launcher&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w30/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w30/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Configurable webserver port, webview external-link freeze</title>
      <description>&lt;p&gt;A small webserver and webview week. The tray-managed webserver can now run on any port, and handing a link off to a slow-starting browser no longer locks up the webview window.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;webserver.port&lt;/code&gt; config (default &lt;code&gt;3100&lt;/code&gt;) used for the tray&apos;s Open in browser link and for detecting and stopping the server&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Clicking an external link in the webview no longer freezes it (&amp;quot;Not Responding&amp;quot;) while the browser starts up&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w28/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w28/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Webserver shell marker, Windows instance cleanup</title>
      <description>&lt;p&gt;A small plumbing week. Shell profiles can now tell when they&apos;re being loaded for the tray-managed webserver, and on Windows the hotkey closes the old launcher again without touching open webview windows.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The tray-launched webserver runs with &lt;code&gt;PROJECT_SWITCH_WEBSERVER=1&lt;/code&gt; (passed into WSL via &lt;code&gt;WSLENV&lt;/code&gt;), so shell profiles can detect it and skip interactive setup&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;On Windows, pressing the hotkey again closes the previous launcher while leaving open webview windows alone; the process query it relied on was invalid WQL&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w27/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w27/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: macOS webview menu bar and clipboard shortcuts</title>
      <description>&lt;p&gt;A single fix this week. The macOS webview window had no menu bar, which meant copy, paste and quit shortcuts did nothing inside it.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The macOS webview has a menu bar again, so Cmd+Q and Cmd+X/C/V/A work in it&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w26/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w26/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: In-app webview window, pinned commands, tray-managed webserver</title>
      <description>&lt;p&gt;project-switch started hosting web apps itself this week. A command can open in a borderless window that comes back with the hotkey, and the tray can now keep the local &lt;code&gt;assist&lt;/code&gt; web UI running. Favourite commands can also be pinned so they&apos;re always first in the list.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Webview windows reload with Cmd+R / Ctrl+R and are titled after the command that opened them&lt;/li&gt;&lt;li&gt;&lt;code&gt;webserver&lt;/code&gt; config and a tray submenu (Enabled, Restart, Open in browser, View logs) that keeps the &lt;code&gt;assist&lt;/code&gt; webserver running in the background, inside WSL on Windows and natively on macOS&lt;/li&gt;&lt;li&gt;&lt;code&gt;pinned: true&lt;/code&gt; on a command keeps it at the top of the launcher&apos;s recent list&lt;/li&gt;&lt;li&gt;&lt;code&gt;webview: true&lt;/code&gt; on a URL command opens it in a reusable borderless in-app window on Windows and macOS instead of a browser; links to other sites go to the default browser&lt;/li&gt;&lt;li&gt;Tray, Dock and window icons now use the project logo&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Stopping the webserver only kills the process listening on its port, and the macOS process kill matches the exact process name instead of anything containing it&lt;/li&gt;&lt;li&gt;Terminal links clicked inside the macOS webview now open&lt;/li&gt;&lt;li&gt;The switcher and webview windows show the right taskbar icon on Windows&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w25/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w25/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Store and MSIX apps in the Windows launcher</title>
      <description>&lt;p&gt;A single fix this week. Windows apps installed from the Store or as MSIX packages were missing from the launcher because they have no shortcut file. They&apos;re now read straight from the shell&apos;s Apps folder.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Store and MSIX-packaged apps on Windows, which have no Start Menu &lt;code&gt;.lnk&lt;/code&gt;, now appear in the launcher via the shell &lt;code&gt;AppsFolder&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w23/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w23/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: macOS launcher fixes</title>
      <description>&lt;p&gt;Two macOS fixes this week. When a monitor is selected the launcher window shows up again, and Apple&apos;s built-in apps now appear in the launcher alongside everything else.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The launcher window on macOS no longer stays invisible off-screen when a monitor is selected&lt;/li&gt;&lt;li&gt;Built-in macOS apps in &lt;code&gt;/System/Applications&lt;/code&gt; (Calculator, Notes, etc.) now appear as shortcuts&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w18/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w18/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Clients with nested projects</title>
      <description>&lt;p&gt;project-switch now has two levels: clients, each with their own projects. If you juggle several repos for one client, they can share the client&apos;s links while still having their own, and existing configs are migrated automatically.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Clients can contain nested &lt;code&gt;projects&lt;/code&gt;, with commands resolved project &amp;gt; client &amp;gt; global; &lt;code&gt;switch&lt;/code&gt; picks a client first, then the client itself or one of its projects&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Config top level renamed from &lt;code&gt;projects&lt;/code&gt;/&lt;code&gt;currentProject&lt;/code&gt; to &lt;code&gt;clients&lt;/code&gt;/&lt;code&gt;currentClient&lt;/code&gt;; existing local and included configs are migrated in place on first load&lt;/li&gt;&lt;li&gt;The &lt;code&gt;add&lt;/code&gt; command is removed&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w17/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w17/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Launcher selection and typed arguments together</title>
      <description>&lt;p&gt;A single fix this week. Last week&apos;s two launcher fixes were undoing each other: either the highlighted item opened or your typed arguments were kept, but not both. Now both work.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pressing Enter in the GUI launcher opens the highlighted item and still keeps any arguments typed after its key&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w15/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w15/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Recent actions, monitor selection, GUI error dialogs, faster hotkey</title>
      <description>&lt;p&gt;The new GUI launcher got polished for everyday use. It opens instantly and on the right monitor, remembers what you used last, and when something goes wrong it shows an error instead of failing silently.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Errors are appended to &lt;code&gt;~/.project-switch.log&lt;/code&gt; (capped at 64KB) and shown in a native dialog in GUI mode instead of being lost&lt;/li&gt;&lt;li&gt;&lt;code&gt;Monitor&lt;/code&gt; submenu in the tray to choose which screen the launcher appears on, saved to config and passed as &lt;code&gt;list --gui --monitor N&lt;/code&gt;&lt;/li&gt;&lt;li&gt;The launcher opens showing up to 10 recent actions, including calculator expressions and file paths, stored in &lt;code&gt;~/.project-switch-history.yml&lt;/code&gt;; typing switches to the full list&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Windows terminal commands are spawned through &lt;code&gt;cmd&lt;/code&gt; again instead of a Windows Terminal tab, so &lt;code&gt;.cmd&lt;/code&gt; scripts resolve on &lt;code&gt;PATH&lt;/code&gt; and the launcher doesn&apos;t wait for them&lt;/li&gt;&lt;li&gt;Unfinished calculator expressions like &lt;code&gt;=5+&lt;/code&gt; show &lt;code&gt;= 5+...&lt;/code&gt; while you type instead of an error&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Arguments typed after a URL command&apos;s key in the GUI launcher (e.g. &lt;code&gt;g some text&lt;/code&gt;) are no longer dropped&lt;/li&gt;&lt;li&gt;Pressing Enter in the GUI launcher opens the highlighted item, not always the first one&lt;/li&gt;&lt;li&gt;The launcher window appears without the half-second delay after ALT+SPACE and reliably takes focus&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w14/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w14/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Native egui launcher window, hotkey merged into main binary</title>
      <description>&lt;p&gt;The launcher moved out of the terminal this week and into a native window. One ALT+SPACE now brings up an instant egui picker with everything the terminal version had, and the hotkey daemon started moving into the main binary so there&apos;s a single program to run.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Native launcher window (&lt;code&gt;list --gui&lt;/code&gt;, built with egui) with the same commands, shortcuts, calculator, URL opening and file path browsing as the terminal picker; directories offer both open and browse&lt;/li&gt;&lt;li&gt;The hotkey now opens the native window instead of a terminal, and the window hides when it loses focus&lt;/li&gt;&lt;li&gt;Running &lt;code&gt;project-switch&lt;/code&gt; with no subcommand starts the hotkey and tray daemon from the main binary&lt;/li&gt;&lt;li&gt;On Windows the hotkey app copies itself to &lt;code&gt;%LOCALAPPDATA%\project-switch&lt;/code&gt; and relaunches from there, so the build output can be rebuilt while it runs&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Terminal commands on Windows run in a new Windows Terminal (&lt;code&gt;wt.exe&lt;/code&gt;) tab so interactive commands get a console&lt;/li&gt;&lt;li&gt;The hotkey and launcher windows no longer show Dock icons on macOS&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Slashes in typed URL arguments are kept as path separators instead of being encoded to &lt;code&gt;%2F&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w13/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w13/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Explicit terminal commands, stricter config, always-encoded search args</title>
      <description>&lt;p&gt;The config format got clearer this week. Terminal commands now have their own &lt;code&gt;command&lt;/code&gt; field, typos in config keys show up as errors instead of being silently ignored, and search arguments are always encoded properly. Errors also stay on screen long enough to read when &lt;code&gt;list&lt;/code&gt; was opened from the hotkey.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;command&lt;/code&gt; field for entries that run in the terminal instead of a browser; the config is rejected if an entry sets both &lt;code&gt;url&lt;/code&gt; and &lt;code&gt;command&lt;/code&gt;, or both &lt;code&gt;command&lt;/code&gt; and &lt;code&gt;browser&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;list --debug&lt;/code&gt; prints the full command and arguments before running them&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Unknown keys in &lt;code&gt;~/.project-switch.yml&lt;/code&gt; are now a config error instead of being silently ignored&lt;/li&gt;&lt;li&gt;Errors pause with &amp;quot;Press Enter to exit&amp;quot; so they stay readable when &lt;code&gt;list&lt;/code&gt; was opened from the hotkey&lt;/li&gt;&lt;li&gt;Arguments typed after a URL command&apos;s key are always URL-encoded; the &lt;code&gt;url_encode&lt;/code&gt; option is removed&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A command&apos;s &lt;code&gt;args&lt;/code&gt; on a URL entry are now passed to the browser as flags, not appended to the URL&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w11/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w11/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Windows URLs with spaces</title>
      <description>&lt;p&gt;A one-fix week. On Windows, URLs with spaces now reach the browser as a single address instead of being split apart by PowerShell.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;URLs containing spaces (e.g. a search with unencoded arguments) no longer get split into several tabs when opened in a named browser on Windows&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w10/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w10/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Inline calculator in list</title>
      <description>&lt;p&gt;A small quality-of-life week. The ALT+SPACE launcher can now do quick sums too, so you don&apos;t need to open a separate calculator.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Calculator mode in &lt;code&gt;list&lt;/code&gt;: type &lt;code&gt;=&lt;/code&gt; followed by an expression (e.g. &lt;code&gt;=5*1.1&lt;/code&gt;) to see the result live as you type&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w09/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w09/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Global hotkey tray app, app shortcuts, shared config with git sync</title>
      <description>&lt;p&gt;project-switch became a keyboard launcher this week. A tray app puts &lt;code&gt;list&lt;/code&gt; one ALT+SPACE away on Windows and macOS. The picker gained installed apps and file paths next to project links, and a shared config that syncs through git means the same commands follow you between machines.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;project-switch-hotkey&lt;/code&gt; tray app for Windows and macOS: a global ALT+SPACE hotkey that opens &lt;code&gt;project-switch list&lt;/code&gt; in a terminal (Windows Terminal, or iTerm/Terminal on macOS), closing any instance already open&lt;/li&gt;&lt;li&gt;Tray menu with &lt;code&gt;Open&lt;/code&gt;, a &lt;code&gt;Shortcuts&lt;/code&gt; toggle and &lt;code&gt;Exit&lt;/code&gt;; the hotkey app replaces older copies of itself on start and creates the config file if it&apos;s missing&lt;/li&gt;&lt;li&gt;Desktop and Start Menu shortcuts (&lt;code&gt;.lnk&lt;/code&gt;/&lt;code&gt;.url&lt;/code&gt;) on Windows and &lt;code&gt;.app&lt;/code&gt; bundles on macOS appear in &lt;code&gt;list&lt;/code&gt; as launchable entries, configurable via &lt;code&gt;shortcuts.enabled&lt;/code&gt;, &lt;code&gt;extraPaths&lt;/code&gt; and &lt;code&gt;exclude&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;include&lt;/code&gt; config key that merges a shared config (e.g. from a dotfiles repo) into the local &lt;code&gt;~/.project-switch.yml&lt;/code&gt;, matching projects by &lt;code&gt;name&lt;/code&gt; and commands by &lt;code&gt;key&lt;/code&gt;&lt;/li&gt;&lt;li&gt;The hotkey app keeps an included config that lives in a git repo in sync, pulling and committing/pushing local changes every 30 seconds&lt;/li&gt;&lt;li&gt;File path autocomplete in &lt;code&gt;list&lt;/code&gt;: typing a drive letter or UNC path browses folders and files to open&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;list&lt;/code&gt; works without a current project, showing global commands and shortcuts&lt;/li&gt;&lt;li&gt;&lt;code&gt;~/.project-switch.yml&lt;/code&gt; is created automatically on first run&lt;/li&gt;&lt;li&gt;Terminal commands launched from &lt;code&gt;list&lt;/code&gt; now wait for the command to finish&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2026-w08/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2026-w08/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Direct URL opening, open deprecated</title>
      <description>&lt;p&gt;The prompt now doubles as a quick address bar: type any domain and it opens in the right browser. &lt;code&gt;list&lt;/code&gt; also became the single way in, with &lt;code&gt;open&lt;/code&gt; deprecated and hidden.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Typing a URL or bare domain (e.g. &lt;code&gt;example.com&lt;/code&gt;) that matches no command opens it directly in the project&apos;s browser, adding &lt;code&gt;https://&lt;/code&gt; when it&apos;s missing&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;open&lt;/code&gt; is deprecated and hidden from help in favour of &lt;code&gt;list&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 14 Dec 2025 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2025-w50/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2025-w50/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Autocomplete selection fix, tidier config saves</title>
      <description>&lt;p&gt;A short fix-up week. &lt;code&gt;list&lt;/code&gt;&apos;s autocomplete now selects suggestions correctly, and switching projects no longer leaves the hand-edited YAML config reordered and full of &lt;code&gt;null&lt;/code&gt;s.&lt;/p&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Saving &lt;code&gt;~/.project-switch.yml&lt;/code&gt; keeps the file&apos;s existing key order instead of rewriting it&lt;/li&gt;&lt;li&gt;Saving the config no longer writes empty fields as &lt;code&gt;null&lt;/code&gt; or &lt;code&gt;url_encode: false&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Picking a highlighted suggestion in &lt;code&gt;list&lt;/code&gt; fills in just its key, without the coloured &lt;code&gt;→ url&lt;/code&gt; text that broke the match&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 07 Dec 2025 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2025-w49/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2025-w49/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Global commands, terminal commands, typed arguments, browser profiles</title>
      <description>&lt;p&gt;A single day&apos;s work turned project-switch from a bookmark opener into a general launcher. Commands can now be shared across projects, run things in the terminal, take arguments typed at the prompt (search queries, ticket numbers) and open in a chosen browser profile.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;url_encode&lt;/code&gt; option per command that URL-encodes typed arguments before they&apos;re appended to the URL&lt;/li&gt;&lt;li&gt;Browser strings can carry arguments (e.g. &lt;code&gt;firefox -P work&lt;/code&gt;) to open URLs in a specific browser profile&lt;/li&gt;&lt;li&gt;Typed arguments in &lt;code&gt;list&lt;/code&gt;: enter &lt;code&gt;key some args&lt;/code&gt; to append the args to the command&apos;s URL or pass them to its terminal command&lt;/li&gt;&lt;li&gt;Commands whose &lt;code&gt;url&lt;/code&gt; isn&apos;t an &lt;code&gt;http&lt;/code&gt; link now run as terminal commands, with optional &lt;code&gt;args&lt;/code&gt; from config&lt;/li&gt;&lt;li&gt;Top-level &lt;code&gt;global&lt;/code&gt; command list that&apos;s available in every project, with project commands taking precedence&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;list&lt;/code&gt; is now a type-to-filter autocomplete prompt instead of a fixed select menu&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 05 Oct 2025 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2025-w40/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2025-w40/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Interactive list picker, Windows browser launching</title>
      <description>&lt;p&gt;The week added &lt;code&gt;list&lt;/code&gt;, so you no longer need to remember a project&apos;s link keys: you just pick from a menu. Opening a browser on Windows was also fixed so it works no matter which directory you launch from.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;list&lt;/code&gt; command: an interactive picker over the current project&apos;s URLs, sorted by key, that opens the chosen one in its configured browser&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Opening URLs on Windows now goes through PowerShell &lt;code&gt;Start-Process&lt;/code&gt; from &lt;code&gt;C:\&lt;/code&gt;, so it works when launched from a WSL or UNC working directory&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2025-w33/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2025-w33/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: Rust rewrite, native Windows and Linux binaries</title>
      <description>&lt;p&gt;project-switch dropped Node and was rewritten in Rust. It&apos;s the same tool and config, but it now ships as a single native binary that starts almost instantly, which matters for something you run constantly from the terminal.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Docker cross-compilation build (&lt;code&gt;docker-compose up build&lt;/code&gt;) that outputs &lt;code&gt;bin/windows/project-switch.exe&lt;/code&gt; and &lt;code&gt;bin/linux/project-switch&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Rewrote the CLI in Rust with &lt;code&gt;clap&lt;/code&gt;, keeping the &lt;code&gt;switch&lt;/code&gt;, &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;current&lt;/code&gt; and &lt;code&gt;open&lt;/code&gt; commands and the existing &lt;code&gt;~/.project-switch.yml&lt;/code&gt; format&lt;/li&gt;&lt;li&gt;Startup time drops from roughly 100-200ms under Node to a few milliseconds as a native binary&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2025-w32/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2025-w32/</guid>
      <category>project-switch</category>
    </item>
    <item>
      <title>project-switch: First release, project switching, per-project URL shortcuts</title>
      <description>&lt;p&gt;The first week of project-switch: a small Node CLI that remembers which project you&apos;re working on and opens its related URLs (docs, staging, prod, GitHub) in the right browser with a single short key.&lt;/p&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;project-switch&lt;/code&gt; CLI (TypeScript, built on &lt;code&gt;commander&lt;/code&gt;) with &lt;code&gt;switch&lt;/code&gt;, &lt;code&gt;add&lt;/code&gt; and &lt;code&gt;current&lt;/code&gt; commands for picking and tracking the current project&lt;/li&gt;&lt;li&gt;&lt;code&gt;open &amp;lt;key&amp;gt;&lt;/code&gt; command that launches a URL configured for the current project, on Windows, macOS and Linux&lt;/li&gt;&lt;li&gt;Browser selection per command, per project or globally via &lt;code&gt;defaultBrowser&lt;/code&gt;, falling back in that order&lt;/li&gt;&lt;li&gt;YAML config stored at &lt;code&gt;~/.project-switch.yml&lt;/code&gt;, with an &lt;code&gt;example-config.yml&lt;/code&gt; to start from&lt;/li&gt;&lt;/ul&gt;</description>
      <pubDate>Sun, 03 Aug 2025 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/project-switch/2025-w31/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/project-switch/2025-w31/</guid>
      <category>project-switch</category>
    </item>
  </channel>
</rss>
