Software Engineer · Self-Hosting Advocate · Music Obsessive
Building purposeful software — clean architectures, developer tooling, and the occasional vanity project.
I'm a software engineer with a fondness for clean architecture, strong opinions about tooling, and an embarrassingly deep interest in music.
By day I design and build .NET systems with a focus on clean architecture, proper testing, and CI/CD that actually works. By night I run self-hosted infrastructure, build Obsidian plugins, and over-engineer my music library. When I'm away from the keyboard you'll find me training for a triathlon or hunting down a record.
| Category | Technologies |
|---|---|
| Languages | |
| Frameworks | |
| Patterns | Clean Architecture · Mediator · Result Pattern · Vertical Slice |
| Infra & Tooling | |
| Daily Drivers |
An eclectic radio station built on Hugo with a bespoke .NET 10 content operations pipeline. The pipeline handles album intake, Spotify and Lidarr integration, and automated publishing — all packaged as a self-contained binary with a GHCR-published Docker image.
Tech: .NET 10 · Clean Architecture · Mediator · ErrorOr · Docker · GitHub Actions · Hugo
A TypeScript plugin for Obsidian that brings CookLang recipe management into your knowledge base. Render, browse, and manage structured recipes alongside your notes.
Tech: TypeScript · Obsidian API
Sample project demonstrating fitness data integration with the Strava API via Strava.NET — a useful reference for anyone building health and activity tracking applications.
Tech: C# · .NET · Strava API
A structured, opinionated productivity system: reusable Todoist templates, weekly review workflows, and automation patterns for power users who want repeatability without the overhead.
- 🔨 Pushed to
colin-gourlay/sundown-sessions27 Mar 2026 - 🔨 Pushed to
colin-gourlay/todoist-playbook27 Mar 2026 - 🐛 Closed issue in
colin-gourlay/todoist-playbook— Add the ability to search for a template on the GitHub pages27 Mar 2026 - 🔀 Opened PR in
colin-gourlay/todoist-playbook— __27 Mar 2026 - 🌿 Created branch
chore/weekly-review-duration-adjustmentincolin-gourlay/todoist-playbook27 Mar 2026 - 🐛 Opened issue in
colin-gourlay/todoist-playbook— Add the ability to search for a template on the GitHub pages27 Mar 2026 - 🌿 Created branch
feat/artist-interview-invite-workflowincolin-gourlay/todoist-playbook27 Mar 2026 - 🐛 Closed issue in
colin-gourlay/todoist-playbook— Review repo27 Mar 2026 - 🔨 Pushed to
colin-gourlay/todoist-playbook26 Mar 2026 - 🔀 Opened PR in
colin-gourlay/todoist-playbook— __26 Mar 2026
Last updated: 27 March 2026 at 17:20 UTC
- sundown-sessions — 🌎 The Sundown Sessions website.
HTML - todoist-playbook — A productivity playbook for Todoist - reusable templates, weekly review workflows, and automation patterns for power users.
- github-actions
- foam2
SCSS - art-school-dance
HTML⭐ 1 - pi-collectarr
C# - resume
HTML - collectarr
Last updated: 27 March 2026 at 17:20 UTC
⭐ Starred Repositories
- github/awesome-copilot – Community-contributed instructions, agents, skills, and configurations for GitHub Copilot
- microsoft/mcsmcp – Lab for creating an MCP Server and using it in Microsoft Copilot Studio
- nlweb-ai/NLWeb – Main reference implementation for NLWeb: natural language interfaces for the web
- Avaiga/taipy – Turns Data and AI algorithms into production-ready web applications in no time
- fspconsulting/Semantic-Kernel-Plugin-Demo – A demo solution illustrating how a Semantic Kernel plugin can be implemented
- jaxxstorm/tailscale-mcp – A Tailscale MCP server
- microsoft/AzDevOpsDemoGenerator – Azure DevOps Demo Generator for creating pre-populated sample projects
- Azure/data-api-builder – Modern REST, GraphQL endpoints and MCP tools for Azure Databases
- projectkudu/kudu – Engine behind git/hg deployments and WebJobs in Azure Web Sites
- weeyin83/ahub-dashboard – Azure dashboard for monitoring Azure Hybrid Benefit status at a glance
- opentofu/opentofu – OpenTofu: declaratively manage your cloud infrastructure
- spinnaker/spinnaker – Multi-cloud continuous delivery platform for releasing software changes
- dotnet/aspnetcore – ASP.NET Core cross-platform framework for modern cloud-based web applications
- dotnet-architecture/eShopOnContainers – Cross-platform .NET sample microservices and container based application
- dotnet/roslyn – The Roslyn .NET compiler providing C# and Visual Basic language analysis APIs
- App-vNext/Polly – .NET resilience and transient-fault-handling library
- mono/mono – Mono open source ECMA CLI, C# and .NET implementation
- bchavez/Bogus – A simple fake data generator for C#, F#, and VB.NET
- Humanizr/Humanizer – .NET library for manipulating and displaying strings, enums, dates, times, and quantities
- xoofx/markdig – A fast, powerful, CommonMark compliant, extensible Markdown processor for .NET
- MvvmCross/MvvmCross – The .NET MVVM framework for cross-platform solutions including Android, iOS, macOS, and WPF
- fluentassertions/fluentassertions – Extensive .NET extension methods for specifying expected outcomes of unit tests
- AutoFixture/AutoFixture – Open source library to minimize the arrange phase of unit tests in .NET
- microsoft/dotnet-podcasts – .NET reference application featuring ASP.NET Core, Blazor, .NET MAUI, Microservices, and more
- ErikEJ/EFCorePowerTools – Entity Framework Core Power Tools for reverse engineering, migrations, and model visualization
- OrchardCMS/Orchard – Free, open source, community-focused CMS built on the ASP.NET MVC platform
- ardalis/SmartEnum – A base class for creating strongly typed enum replacements in C#
- wiremock/WireMock.Net – Flexible product for stubbing and mocking web HTTP responses using advanced request matching
- dennisdoomen/CSharpGuidelines – Coding guidelines for C# 9.0, design principles, and layout rules
- randyrants/sharpkeys – SharpKeys: Windows utility to remap keyboard keys via a Registry key
- arminreiter/FeedReader – C# RSS and ATOM Feed reader library supporting RSS 0.91, 0.92, 1.0, 2.0, and ATOM
- colinangusmackay/ActionBlockThrottle – Demo of using an ActionBlock to throttle parallel tasks in C#
- northwoodspd/MAPIWrapper – C# wrapper of MAPI COM dll
- iamandylamb/ExplicitMapper – A mapping framework that is completely explicit
- jchannon/Nancy.Siren – Return Siren hypermedia payloads when using the correct Accept header in Nancy
- phillip-haydon/Nancy.Raygun – Nancy provider for the Raygun error reporting service
- yovannyr/microservice-template – C# template for microservices
- mbcrump/csharpsix – C# 6 feature samples
- kphillpotts/IntroXamarinWithVS – Code samples for the Introduction to Xamarin with Visual Studio Webinar
- clairernovotny/ninject – The ninja of .NET dependency injectors
- moby/moby – The Moby Project: a collaborative project for the container ecosystem
- devcontainers/images – Pre-built dev container images published under mcr.microsoft.com/devcontainers
- containrrr/watchtower – Automates Docker container base image updates
- ahmetb/kubectx – Faster way to switch between clusters and namespaces in kubectl
- amir20/dozzle – Realtime log viewer for Docker, Swarm, and Kubernetes containers
- distribution/distribution – Toolkit to pack, ship, store, and deliver container content
- genuinetools/bane – Custom AppArmor profile generator for Docker containers
- Chambras/DockerCon2021 – DockerCon 2021 demo projects
- petersem/DockerStack – A curated list of docker apps in a compose file for home labs
- kdave/btrfsmaintenance – Scripts for btrfs maintenance tasks like scrub, balance, trim, and defrag
- twbs/bootstrap – The most popular HTML, CSS, and JavaScript framework for responsive, mobile-first web projects
- mrdoob/three.js – JavaScript 3D Library
- FortAwesome/Font-Awesome – The iconic SVG, font, and CSS toolkit
- chartjs/Chart.js – Simple HTML5 Charts using the
<canvas>tag - moment/moment – Parse, validate, manipulate, and display dates in JavaScript
- gulpjs/gulp – A toolkit to automate and enhance your workflow
- tastejs/todomvc – Helping you select a JavaScript framework with Todo apps for React, Angular, Vue, and more
- caolan/async – Async utilities for Node.js and the browser
- eslint/eslint – Find and fix problems in your JavaScript code
- ajaxorg/ace – Ace (Ajax.org Cloud9 Editor)
- typicode/lowdb – Simple and fast JSON database
- Reactive-Extensions/RxJS – The Reactive Extensions for JavaScript
- handlebars-lang/handlebars.js – Minimal templating on steroids
- less/less.js – Less: the dynamic stylesheet language
- janl/mustache.js – Minimal templating with {{mustaches}} in JavaScript
- requirejs/requirejs – A file and module loader for JavaScript
- h5bp/html5-boilerplate – A professional front-end template for building fast, robust, and adaptable web apps
- babel/babel – A compiler for writing next generation JavaScript
- jshint/jshint – A tool to detect errors and potential problems in your JavaScript code
- sinonjs/sinon – Test spies, stubs, and mocks for JavaScript
- knockout/knockout – Knockout makes it easier to create rich, responsive UIs with JavaScript
- d3/d3 – Bring data to life with SVG, Canvas, and HTML
- storybookjs/storybook – The industry standard workshop for building, documenting, and testing UI components
- DavidAnson/markdownlint – A Node.js style checker and lint tool for Markdown/CommonMark files
- AykutSarac/jsoncrack.com – Innovative open-source visualization for JSON, YAML, XML, and CSV data formats
- basarat/typescript-book – The definitive guide to TypeScript
- Mango/slideout – A touch slideout navigation menu for mobile web apps
- faye/faye – Simple pub/sub messaging for the web
- headjs/headjs – The only script in your HEAD
- dataarts/webgl-globe – WebGL Globe: a platform for visualizing latitude/longitude based data
- angular/batarang – AngularJS WebInspector Chrome Extension
- gwatts/jquery.sparkline – jQuery plugin to generate small sparkline charts directly in the browser
- keanulee/good-map – A simple custom element wrapper for Google Maps JavaScript API
- airbnb/backpack – A pack of UI components for Backbone projects
- dwyl/repo-badges – Use repo badges (build passing, coverage, etc.) in your README/markdown files
- ducksoupdev/gulp-site-generator-example – An example site using the Gulp static site generator
- mryellow/knockoutjs-sparkline – KnockoutJS custom binding for jQuery Sparkline charts
- stoplightio/spectral – A flexible JSON/YAML linter for OpenAPI, Arazzo, and AsyncAPI style guides
- scalar/scalar – Open-source API platform: Modern REST API Client and Beautiful API References
- typicode/json-server – Get a full fake REST API with zero coding in less than 30 seconds
- goadesign/goa – Design-first Go framework generating API code, documentation, and clients
- microsoft/restler-fuzzer – The first stateful REST API fuzzing tool for automatically testing cloud services
- mountebank-testing/mountebank – Over the wire test doubles
- dreamhead/moco – Easy Setup Stub Server
- node-red/node-red-nodegen – Command line tool to convert Node-RED function nodes or Swagger docs to custom nodes
- sourcey/symple-server – Symple real-time messaging and presence server using Node.js, Socket.IO, and Redis
- sourcey/symple-client – Messaging, presence, and video streaming protocol for desktop, browser, and mobile
- fixerAPI/fixer – A foreign exchange rates and currency conversion API
- theonedev/onedev – Git Server with CI/CD, Kanban, and Packages – seamless integration
- dependabot/dependabot-core – Dependabot's core logic for creating dependency update PRs
- github-changelog-generator/github-changelog-generator – Automatically generate change log from tags, issues, labels, and pull requests
- probot/probot – A framework for building GitHub Apps to automate and improve your workflow
- cake-contrib/Cake.AliaSql – AliaSql Script Alias for Cake build tool
- cake-contrib/Cake.SemVer – Cake build aliases and classes for Semantic Versioning
- cake-contrib/Cake.Issues.MsBuild – Addin for providing MSBuild warning issues to Cake.Issues
- cake-contrib/Cake.Figlet – FIGlet (ASCII art text) support for Cake builds
- gep13-archive/cake-vs-gep13 – Extensions for Visual Studio Code for Cake
- GitTools/GitTools.Core – Core library for all git tools
- aspnet/Coherence – A build that verifies all packages form a consistent graph
- software-programmer/teamcity-config-transform – TeamCity configuration transform scripts
- enlivenhq/teamcity-slack – Configurable TeamCity notifier plugin for Slack
- martinwiboe/PandocTasks – Build action to transform text files using pandoc during build
- paul-hammant/google-monorepo-sim – Simulation of a Google-style monorepo
- nx-dotnet/nx-dotnet – A Nx plugin adding support for .NET 5+ projects with full project graph
- chrisjwalk/angular-cli-netcore-ngrx-starter – Angular demo app using Nx, esbuild, NgRx/signals, Material, Tailwind, and .NET
- loedeman/AutoMapper – A convention-based object-object mapper in JavaScript, written in TypeScript
- johnpapa/vscode-cloak – VS Code extension to hide/show environment keys to avoid screen sharing accidents
- nvm-sh/nvm – Node Version Manager: POSIX-compliant bash script to manage multiple active Node.js versions
- browserless/browserless – Deploy headless browsers in Docker for automation and testing
- prasmussen/gdrive – Google Drive CLI Client
- google/skicka – Command-line utility for working with Google Drive
- airbnb/newrelic_plugin – New Relic Ruby Plugin Agent SDK
- pact-foundation/pact-ruby – Consumer driven contract testing with a mock service and DSL
- failsafe-lib/failsafe – Fault tolerance and resilience patterns for the JVM
- matryer/is – Professional lightweight testing mini-framework for Go
- github/scientist – A Ruby library for carefully refactoring critical paths
- spotify/apollo – Java libraries for writing composable microservices
- grafana/grafana – The open and composable observability and data visualization platform
- lowlighter/metrics – An infographics generator with 30+ plugins to display GitHub account stats as SVG, Markdown, or PDF
- tailscale/tailscale – The easiest, most secure way to use WireGuard and 2FA
- tailscale/golink – A private shortlink service for tailnets
- tailscale-dev/service-design – A template repository for creating tsnet services that feel like Tailscale
- gellin/csharp_file_shredder – A secure open source file deleting tool for Windows with drag-and-drop support
- CCOSTAN/Home-AssistantConfig – Home Assistant configuration and documentation for a fully automated smart house
- skalavala/mysmarthome – Smart Home configuration with Home Assistant
- frenck/awesome-home-assistant – A curated list of amazingly awesome Home Assistant resources
- UbhiTS/ha-config-ataraxis – Home Assistant configuration and automation examples
- drbayer/xbar-plugin-onair – xbar plugin to show on-air status indicator
- eliotstocker/Light-Controller – Android app to control smart lights such as LimitlessLED
- andy-scott/MiLight.Net – MiLight/AppLamp C# Client for controlling smart lights
- matt4530/ARDrone-on-Android – Control AR.Drone from Android mobile devices
- navidrome/navidrome – Your Personal Streaming Service: modern music server and streamer
- rahims/SoCo – SoCo (Sonos Controller): programmatically control Sonos speakers in Python
- akhilrex/podgrab – A self-hosted podcast manager and downloader with an integrated player
- zsoltsajben/NChromaprint – .NET port of the Chromaprint audio fingerprinting library
- ptorchilov/mp3-editor – MP3 editor with audio trimming and effects
- pablorusso/Spotify2.bundle – Spotify music streaming for Plex
- airbnb/node-spotify-web – Node.js implementation of the Spotify Web protocol
- adrianjones/PlexCasts.bundle – Plex Channel for podcast management and playback
- olsh/Feedly-Notifier – Chrome, Firefox, Opera, and Edge extension for reading RSS feeds from Feedly
- christophdebaene/DiscogsConnect – .NET client library for accessing the Discogs REST API v2.0
- rawrmaan/blisscogs – Organize your Discogs selection into shelves
- BernardCooley/discogs-angular – Angular application for browsing Discogs collections
- doctorfree/Obsidian-Custom-Discogs – Automated workflow to generate an Obsidian vault from a Discogs user collection
- Prowlarr/Prowlarr – Indexer manager/proxy for PVR apps, managing Torrent Trackers and Usenet Indexers
- MediaBrowser/Emby – Emby Server: a personal media server with apps on just about every device
- ZeroQI/Lambda.bundle – Local Media Export: a Plex agent to export metadata locally
- TheBigRoomXXL/tinyfeed – Generate a static HTML page from a collection of RSS/Atom feeds
- victornottat/garmin-trimp-perhour – Garmin Connect IQ TRIMP per hour data field for training load tracking
- leodavesne/Triathlon-Checklist-For-Windows-Phone – Triathlon gear checklist app for Windows Phone
- abrashev/TriathlonTrainingClub – Web application for triathlon athletes for self-directed training
- pekmil/TriathlonManager – Java EE backend module for managing triathlon tournaments and results
- benmel/triathlon_pictures – Web app that scrapes images from race event pages
- abrander/garmin-connect – Golang client for the unofficial Garmin Connect API
- jamesmontemagno/My-StepCounter – Xamarin iOS & Android starter pedometer sample
- lavantgarde/withings.net – .NET SDK for the Withings Health Data API
- antarr/Withings.NET – C# wrapper around the Withings Health Data API
- amida-tech/withings-lib – Withings API library for Node.js
- movesnet/Moves.Net – .NET library to access the Moves app API
- chrisbarber7/Owin.Security.Strava – OWIN Security Authentication provider for Strava
- super-productivity/super-productivity – Advanced todo list app with Timeboxing, time tracking, and integrations for Jira and GitHub
- planka/planka – PLANKA: Kanban-style project mastering tool for everyone
- nicjansma/todoist-backup – Backup tool for Todoist.com data
- Doist/powerapp-pocket – A PowerApp service for Todoist → Pocket integration
- juliang22/ObsidianTimestampNotes – Obsidian plugin for side-by-side notetaking with videos using timestamps
- OwainWilliams/umbPublisher – Obsidian plugin to push notes to Umbraco 15+ as content nodes
- LeLocTai/savemd – Save web pages as clean Markdown files
- adam-p/markdown-here – Chrome, Firefox, and Thunderbird extension to write email in Markdown
- dgraph-io/dgraph – High-performance graph database for real-time use cases
- dgraph-io/ristretto – A high performance memory-bound Go cache
- patrickmn/go-cache – An in-memory key:value store/cache library for Go
- uber-go/dig – A reflection based dependency injection toolkit for Go
- fsnotify/fsnotify – Cross-platform filesystem notifications for Go
- quii/learn-go-with-tests – Learn Go with test-driven development
- MikeMcQuaid/gitinpractice.com – The home page for an opinionated intermediate/advanced Git book
- DudeWhoCode/backendarmy-blog – Code snippets for backend army blog posts
- JetBrains/whatsnewingoland – What's New in GoLand samples
- xxv/android-lifecycle – A diagram of the Android Activity/Fragment lifecycle
- andrewcbancroft/datadaylife-blog – Code and content for the dataday.life blog
- typescripttv/top-level-await-in-typescript-3-8 – Examples of top-level await in TypeScript 3.8
- Sectimus/FlightBookingProblem – Coding challenge: flight booking problem
- hoshoo21/CanvasLMS – ASP.NET MVC app calling the Canvas LMS API
- welshdave/DDDSW7.Demo – HATEOAS demo code from DDD Southwest 7 conference
- mastodon/mastodon – Your self-hosted, globally interconnected microblogging community
- OwainWilliams/OwainWilliams – GitHub profile repository
- GrzegorzSzczepanek/GrzegorzSzczepanek – GitHub profile repository
- The-Monkeys-and-MAUD/Scrummo-Browser-Plugin – Chrome extension for Trello with Scrum story points
- The-Monkeys-and-MAUD/Scrummo-Burn-Up-Charts-App – Burn-up charts app to accompany Scrummo
- ShareProgress/BookmarkletCreation – How to use the ShareProgress Bookmarklet Generator to create custom bookmarklets




