Skip to content

Instantly share code, notes, and snippets.

View ryanlewis's full-sized avatar

Ryan Lewis ryanlewis

  • Leeds, United Kingdom
  • 23:30 (UTC +01:00)
View GitHub Profile
@ryanlewis
ryanlewis / create-a-prd.md
Last active June 27, 2025 16:16
Creating a PRD with AI Assistance: A Case Study - How we used AI to streamline Product Requirements Document creation for an MCP server proof of concept

Creating a PRD with AI Assistance: A Case Study

How we used AI to streamline Product Requirements Document creation for an MCP server proof of concept

Introduction

We all know that Product Requirements Documents (PRDs) are essential for any software project - they define expectations, technical specs, and success criteria. But let's be honest: creating comprehensive PRDs can be pretty time-consuming, especially when you're trying to make sure you haven't missed any technical details or edge cases.

This blog post walks through our real-world experience creating a PRD for an MCP (Model Context Protocol) dice roll server - a proof-of-concept project we needed to validate our organisation's adoption of MCP technology. What made this interesting was how we used AI assistance to speed up the whole process while keeping the quality high.

@ryanlewis
ryanlewis / sort-teams.js
Created December 15, 2021 16:20
Sort a series of players by a rank into a series of teams
const points = {
'immortal': 7,
'diamond': 6,
'platinum': 5,
'gold': 4,
'silver': 3,
'bronze': 2,
'iron': 1,
};
@ryanlewis
ryanlewis / leaky_bucket.lua
Created March 16, 2021 00:06 — forked from florentchauveau/leaky_bucket.lua
Redis script (Lua) to implement a leaky bucket
-- Redis script to implement a leaky bucket
-- see https://medium.com/callr-techblog/rate-limiting-for-distributed-systems-with-redis-and-lua-eeea745cb260
-- (c) Florent CHAUVEAU <[email protected]>
local ts = tonumber(ARGV[1])
local cps = tonumber(ARGV[2])
local key = KEYS[1]
-- remove tokens < min (older than now() -1s)
local min = ts -1
@ryanlewis
ryanlewis / copy-k8s-resources-across-namespaces.sh
Created July 25, 2017 19:36 — forked from simonswine/copy-k8s-resources-across-namespaces.sh
Copying kubernetes resources accross namespaces
kubectl get rs,secrets -o json --namespace old | jq '.items[].metadata.namespace = "new"' | kubectl create-f -
@ryanlewis
ryanlewis / ContourInAnonymousLoadBalancing.cs
Created July 27, 2016 12:47
Using Umbraco Contour in an anonymous load balanced scenario (v7.3+)
public class ContourFormRefreshPayload
{
public Guid Id { get; set; }
}
public class ContourFormCacheRefresher : JsonCacheRefresherBase<ContourFormCacheRefresher>
{
public static string Id = "AA2970FD-8785-42C2-A289-A7A6614CAE45";
protected override ContourFormCacheRefresher Instance => this;
public override Guid UniqueIdentifier => new Guid(Id);
@ryanlewis
ryanlewis / ConfigureLuceneIndexing.cs
Created August 18, 2015 18:48
Hooking into the Lucene events with Umbraco
using System.Web.UI;
using Examine;
using Examine.LuceneEngine;
using Examine.LuceneEngine.Providers;
using Umbraco.Core;
using Umbraco.Web;
namespace AMAZINGWEBSITE.Web.Core.ApplicationEventHandlers
{
public class ConfigureLuceneIndexing : IApplicationEventHandler
@ryanlewis
ryanlewis / StringExtensions.cs
Last active August 31, 2016 08:14
.FormatWith() extension method that we use with some of our Umbraco sites
using System;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
namespace MyUmbracoSite.Core.Extensions
{
public static class StringExtensions
{
// http://bendetat.com/the-greatest-string-formatwith-implementation-in-the-world.html
@ryanlewis
ryanlewis / sublime.reg
Created March 12, 2015 09:58
Add "Open folder as Sublime project" to Explorer right-click menu
Windows Registry Editor Version 5.00
; This will make it appear when you right click ON a folder
; The "Icon" line can be removed if you don't want the icon to appear
[HKEY_CLASSES_ROOT\Directory\shell\sublime]
@="Open Folder as &Sublime Project"
"Icon"="\"C:\\Program Files\\Sublime Text 3\\sublime_text.exe\",0"
[HKEY_CLASSES_ROOT\Directory\shell\sublime\command]
@ryanlewis
ryanlewis / RedirectToParent.cshtml
Created November 4, 2014 13:59
Redirect to Parent page template
@inherits UmbracoTemplatePage
@{
var parent = Model.Content.Parent;
while (true)
{
if (parent.TemplateId > 0 && parent.TemplateId != Model.Content.TemplateId)
{
break;
}
parent = parent.Parent;
@ryanlewis
ryanlewis / your.csproj
Created July 25, 2014 15:15
How we add all assets in our Web projects
<Project>
<Target Name="BeforeBuild">
<Exec WorkingDirectory="..\.." Command="powershell.exe .\grunt-build.ps1 -target $(Configuration)" />
<ItemGroup>
<Content Include="css\**\*.css" />
<Content Include="js\**\*.js" />
<Content Include="js\**\*.js.map" />
<Content Include="fonts\**\*.*" />
<Content Include="img\**\*.png" />
<Content Include="img\**\*.gif" />