<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Stephen McCullough</title><description>Software engineer and founder - writing and technical notes</description><link>https://swm.cc/</link><language>en-gb</language><item><title>Indexatron Update: Context-Aware Analysis with Local Vision Models</title><link>https://swm.cc/writing/indexatron-context-aware-analysis/</link><guid isPermaLink="true">https://swm.cc/writing/indexatron-context-aware-analysis/</guid><description>How injecting domain knowledge into prompts transformed a generic image classifier into something that understands your specific photo archive</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>Dropping Down to Raw ASGI</title><link>https://swm.cc/notes/dropping-down-to-raw-asgi/</link><guid isPermaLink="true">https://swm.cc/notes/dropping-down-to-raw-asgi/</guid><description>A technical note about Dropping Down to Raw ASGI</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Maintaining Open Source in the AI Era</title><link>https://swm.cc/writing/maintaining-open-source-in-the-ai-era/</link><guid isPermaLink="true">https://swm.cc/writing/maintaining-open-source-in-the-ai-era/</guid><description>Reflections on building and maintaining Ruby and Python packages, how AI has changed the process, and why I&apos;m not entirely sure it&apos;s for the better</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>The LLM Is the New Parser</title><link>https://swm.cc/notes/the-llm-is-the-new-parser/</link><guid isPermaLink="true">https://swm.cc/notes/the-llm-is-the-new-parser/</guid><description>A technical note about The LLM Is the New Parser</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Indexatron: Teaching Local LLMs to See Family Photos</title><link>https://swm.cc/writing/indexatron-local-llm-photo-analysis/</link><guid isPermaLink="true">https://swm.cc/writing/indexatron-local-llm-photo-analysis/</guid><description>An experiment using Ollama with LLaVA and nomic-embed-text to analyse family photos locally - proving that privacy-preserving AI photo analysis actually works</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>Custom Agents for Claude Code</title><link>https://swm.cc/notes/custom-agents-for-claude-code/</link><guid isPermaLink="true">https://swm.cc/notes/custom-agents-for-claude-code/</guid><description>A technical note about Custom Agents for Claude Code</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Building Swanson: A RAG-Enhanced Recommendation System for whatisonthe.tv</title><link>https://swm.cc/writing/building-swanson-recommendation-system/</link><guid isPermaLink="true">https://swm.cc/writing/building-swanson-recommendation-system/</guid><description>How I built a context-aware recommendation system using Claude, Server-Sent Events, and viewing history to suggest TV shows and films</description><pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>A Self-Hosted Image Sharing Pipeline</title><link>https://swm.cc/notes/self-hosted-image-sharing-pipeline/</link><guid isPermaLink="true">https://swm.cc/notes/self-hosted-image-sharing-pipeline/</guid><description>A technical note about A Self-Hosted Image Sharing Pipeline</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Working with Claude: A Senior Developer&apos;s Honest Take</title><link>https://swm.cc/writing/working-with-claude/</link><guid isPermaLink="true">https://swm.cc/writing/working-with-claude/</guid><description>After months of integrating AI into my development workflow, here&apos;s what actually works and why planning mode, skills, and tasks have been game changers</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>Automating Activity Feeds with GitHub Actions and Gists</title><link>https://swm.cc/writing/automating-activity-feeds/</link><guid isPermaLink="true">https://swm.cc/writing/automating-activity-feeds/</guid><description>How I set up automated Spotify and GitHub activity feeds for my personal site using GitHub Actions and Gists</description><pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>Adding OAuth to the Authentication Service</title><link>https://swm.cc/writing/adding-oauth-to-the-auth-service/</link><guid isPermaLink="true">https://swm.cc/writing/adding-oauth-to-the-auth-service/</guid><description>Extending the authentication microservice with OAuth 2.0 support for Keycloak and Google, evaluating FastAPI libraries, and why I chose aioauth</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>Lazy Loading Cache for whatisonthe.tv</title><link>https://swm.cc/notes/lazy-loading-cache-pattern/</link><guid isPermaLink="true">https://swm.cc/notes/lazy-loading-cache-pattern/</guid><description>A technical note about Lazy Loading Cache for whatisonthe.tv</description><pubDate>Sun, 16 Nov 2025 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Extracting Authentication to a Microservice</title><link>https://swm.cc/writing/building-an-authentication-service/</link><guid isPermaLink="true">https://swm.cc/writing/building-an-authentication-service/</guid><description>Lessons from extracting authentication and authorisation into a dedicated microservice, including database migration, in-memory testing, and architectural decisions</description><pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>Cypress Component Isolation Issues</title><link>https://swm.cc/notes/cypress-component-isolation-problem/</link><guid isPermaLink="true">https://swm.cc/notes/cypress-component-isolation-problem/</guid><description>A technical note about Cypress Component Isolation Issues</description><pubDate>Thu, 06 Nov 2025 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Building a Personal Site with Astro</title><link>https://swm.cc/writing/building-with-astro/</link><guid isPermaLink="true">https://swm.cc/writing/building-with-astro/</guid><description>Why I chose Astro for my personal website and what I learned in the process</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><category>Writing</category></item><item><title>TypeScript Conditional Types for API Responses</title><link>https://swm.cc/notes/typescript-conditional-types/</link><guid isPermaLink="true">https://swm.cc/notes/typescript-conditional-types/</guid><description>A technical note about TypeScript Conditional Types for API Responses</description><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><category>Notes</category></item><item><title>Git Worktree for Multiple Branches</title><link>https://swm.cc/notes/git-worktree-trick/</link><guid isPermaLink="true">https://swm.cc/notes/git-worktree-trick/</guid><description>A technical note about Git Worktree for Multiple Branches</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate><category>Notes</category></item></channel></rss>