What I Am Working On

These projects represent different architectural approaches to common problems. Static sites optimised for content delivery and Core Web Vitals. Async Python APIs with PostgreSQL and Redis, prioritising type safety and performance. Rails monoliths with Hotwire, choosing server-side rendering and proven technology over SPA complexity.

Each choice reflects deliberate trade-offs: static vs dynamic, async vs threaded, client-side vs server-side rendering. The technologies differ, but the principle is consistent - choose the simplest architecture that solves the problem, optimise for maintainability, and avoid unnecessary complexity.

I also contribute to open source projects when they align with my work. Some are actively maintained, others are dormant but still useful.

Active

This site. Built with Astro 5 for zero-JavaScript-by-default architecture, Tailwind CSS 4 for modern utility-first styling, and MDX for type-safe content. Optimised for Core Web Vitals with static site generation and deployed via GitHub Pages.

Astro 5Tailwind CSS 4MDXTypeScript
Active

TV and film tracking application. FastAPI backend with async PostgreSQL and SQLAlchemy, Redis for caching TheTVDB API responses, SvelteKit frontend with Tailwind CSS 3 for minimal JavaScript overhead. Built for performance and type safety end-to-end.

FastAPIPostgreSQLRedisSvelteKitTailwind CSS 3
Active

Grub — my recipe collection and weekly meal planner. Rails 8 monolith with PostgreSQL, Hotwire, and a documented JSON API, plus a bundled MCP server so Claude can import recipes from cookbook photos, plan whole weeks conversationally, and read back the aggregated shopping list. The current week syndicates to the eatin' page on this site.

Rails 8PostgreSQLHotwireMCPClaudeJSON API
Active

Self-hosted bookmark and image manager solving the problem of volatile third-party URLs. Ruby on Rails 8 with built-in authentication, polymorphic tagging across bookmarks and photos, Hotwire for progressive enhancement, Active Storage for file uploads, PostgreSQL for full-text search. Short URLs for easy sharing.

Rails 8HotwireTurboStimulusTailwind CSS 4PostgreSQLActive Storage
Active

Archive of my family photos from the 1930s to present. Rails 8 monolith with Active Storage, polymorphic tagging, and mobile-first design. Migrating from Flickr to own the data and ensure longevity. Part of the "own your data" philosophy alongside Jotter and this site.

Rails 8HotwireActive StorageTailwind CSS 4PostgreSQLMobile-First
Active

With enough projects on the go, it's easy to forget one exists. Swanson keeps them all visible. The TUI lives in the terminal for when I'm deep in code. The web dashboard runs on a TV in my office. Both surface the same information: deployments, open issues, CI runs and failures, PRs waiting for review. The TUI includes an MCP server so I can ask Claude or ChatGPT about project status without leaving the conversation.

ReactInkTypeScriptNext.js 16MCPClaude CodeGitHub API
Active

Twitter-inspired microblogging for quick thoughts. Rails 8 with 140-character posts, tagging, and view tracking. Built as a PWA for frictionless mobile posting. Replaced a markdown-based workflow that was too cumbersome on mobile. Part of the "own your data" philosophy.

Rails 8PostgreSQLTailwind CSS 4PWAMicroblogging
Active

Agentic development workflow. Give it a ticket or a brief and it plans deeply with a strong model, splits the work into parallel tasks routed to the right model for the job, runs each agent in an isolated git worktree as a Herdr pane, then merges, checks and gates shipping behind a one-time code. Currently dogfooding it daily with a ledger deciding whether it survives.

PythonClaude CodeMulti-ModelHerdrGit WorktreesOrchestration
On Hold

Official Python wrapper for TheTVDB API v4. Contributed throughout 2023 and 2024. Currently used in whatisonthe.tv for fetching series and movie metadata. Project appears dormant with the last commit in March 2024.

PythonAPI ClientOpen Source
Archived

Ruby gem for TheTVDB API. Created when planning to use Rails for whatisonthe.tv, but ultimately chose FastAPI for async I/O and performance. Stopped active development in 2023. Several other Ruby libraries exist for TheTVDB.

RubyAPI ClientRubyGems
Archived

Perl-based TV listings tracker from 2002-2007. Parsed XMLTV data, augmented with season and star info, watch lists, search, and daily emails. Built before streaming existed and Sky+ was new. Migrated to GitHub in 2013 but never modernised. Pure nostalgia.

PerlMySQLXMLTVVintage

More Projects

I'm working on other projects, but these are the ones I want documented and shared publicly. Most of my GitHub repositories are private by default - I prefer to be intentional about what I publish rather than treating GitHub as a performance space. Half-finished experiments, learning exercises, and abandoned ideas don't need an audience. When something is worth sharing, it'll end up here.