My Projects
Filter by tag:
Fringe Venue Management
Programming, front of house, and production management for Edinburgh Fringe venues, including leading Bedlam Theatre's return to the Edinburgh Fringe
Readoc
CLI tools that let AI agents read and edit Word documents, Excel sheets, and PDFs
Rails Toolkit
Claude Code skills that teach AI agents modern Ruby on Rails 8 conventions, so agent-written code comes out idiomatic
Airtable Utils
Schema export, schema diffing, standards checking, and access auditing for Airtable bases, plus an agent skill for writing correct Airtable scripts
CRM & Data Infrastructure for AI Safety Organisations
I build the infrastructure for AI Safety organisations to manage their contacts, program participants, alumni and donors while automating as much as possible
Vischeck
A hook, skill, and CLI that make AI agents screenshot and visually check their own UI changes
Dev Hooks
Claude Code hooks and skills that make AI coding agents verify their work before declaring it done
Professional Theatre
Freelance sound design, including "Mary: A Gig Theatre Show" across five runs from the Fringe to the Traverse
Composing
Themes and scores for podcasts, theatre, and other narrative art
Catalyze Impact
First employee at the incubator for new AI Safety organisations. Co-ran the incubation program end to end
Edinburgh Festivals Chat
A chatbot that helps you decide which of the Edinburgh Fringe's 3,500 shows to actually go see
Spotify Tools
Listening goals and statistics for Spotify. Retired since Spotify stopped verifying apps from small developers
ImpAmp 3
Web soundboard for live improv comedy
ML4Good EU March 2025
Taught AI agents, adversarial attacks, and AI Safety strategy at a 10-day intensive bootcamp
Student Theatre
Over thirty productions and festivals as production manager, director, producer, and designer, plus two years leading the Edinburgh University Theatre Company and three years on committee for Theatre Paradok
Black Lightning
Maintainer of the Rails application that runs Bedlam Theatre
Running a venue at the Edinburgh Fringe means welcoming hundreds of performances in a month, and having to change between them in minutes. I’ve been there in several roles:
- theSpaceUK 2022 (Deputy Venue Manager): co-ran the Triplex’s 130-seat and 65-seat spaces for four weeks: a team of 10 technicians and Front of House staff, and around 22 companies a day, changing over every week.
- Bedlam Fringe 2023 (Front of House Manager & Programmer): I led the planning for Bedlam Theatre’s return as a Fringe venue after the pandemic, including setting up the management structure and allocating the £50,000 budget. I programmed and liaised with 23 shows from multiple countries for the 90-seat theatre, and recruited, trained, and led a Front of House team of 7.
- Bedlam Fringe 2024 (Front of House Manager): back for a second season, running Front of House and Box Office operations and consolidating the procedures based on last year’s experience.
- Bedlam Fringe 2026 (Production Manager): currently production-managing the venue for this year’s festival.
Sometimes your agent needs to read or write to a Word doc or Excel spreadsheet. By default, it will have to wrangle some Python to do so, so why not make its life a bit easier? Readoc provides 3 different CLIs: readoc extracts the contents of a .docx, .xlsx, or PDF as structured text, readir explores and searches whole folders of mixed documents, and editdoc makes targeted edits to Office files without mangling their formatting.
Point an agent at a shared drive full of policies, budgets, and reports, and it can easily do something useful with them.
Rails Toolkit is a set of Claude Code skills that encode modern Rails 8 conventions and my own project rules, so agent-written code comes out following my interpretation of the Rails way: thin controllers, concern-based models, Solid Queue jobs, Stimulus controllers with modern JavaScript, Hotwire/Turbo patterns, and fixture-based tests.
It also includes some larger workflows: a full application audit that combines the individual skills into a severity-ranked health report for inherited codebases, a database performance review, and a few vendored skills, including an upgrade analyser covering breaking changes from Rails 2.3 through 8.1 and a skill to finally get your test output to not include unnecessary logs.
Many small organisations run on Airtable, but Airtable has no built-in tools that you need once your bases start to grow. Airtable Utils provides these:
- Schema export: dump a base’s full structure (tables, fields, views) to JSON for ingestion by AI agents, documentation and version control.
- Schema diff: compare two schema exports to see what was added, removed, renamed, or retyped.
- Standards check: validate a base against a written set of naming and structure conventions.
- Access audit: list collaborators and permissions across bases to see who can touch what.
It also includes an agent skill for writing Airtable scripts (both scripting-extension and automation scripts) that encodes the API’s quirks and limits to reduce the otherwise slow and manual iteration process.
These grew out of my CRM and database work for AI Safety organisations, where the Airtable base often is most of the institutional memory and heavily used and updated.
I build the infrastructure for AI Safety organisations to manage their contacts, program participants, alumni and donors while automating as much as possible
Vischeck makes an AI agent screenshot its own UI changes and actually look at them before reporting back. Agents are happy to call a layout “good” just by rereading their own code that they never rendered. This package of hook, skill, and CLI makes them take an authenticated screenshot of the local dev server and look at it before declaring victory.
The screenshot CLI handles dev-server auth automatically, and supports dark mode, mobile viewports, element-level captures, and batch screenshots of whole page sets. The hook fires whenever the agent edits a view or template file, so visual verification happens by default.
AI coding agents love saying “this should work now” about code that has never even been run. Dev Hooks is a collection of Claude Code hooks and skills that make sure they do check their work and apply best practices without having to prompt them yourself all the time.
Also includes my personal dev-env setup, built on mise.
Photo from “Mary: A Gig Theatre Show”. Credit: Carla Watson
I work as a freelance sound designer and general organiser in theatre. See also the theatre I did as a student.
Theatre
- Mary: A Gig Theatre Show: Sound Designer
- Bedlam Theatre (January 2024)
- Edinburgh Fringe (August 2024): reviewed by The Stage and A Young(ish) Perspective
- Traverse Theatre (December 2024)
- Duns Play Fest (May 2025)
- Edinburgh Fringe (August 2025)
- 25th Annual Putnam County Spelling Bee: Edinburgh Fringe (August 2024)
Artwork from “Ethics Town” podcast
I compose music for theatre and other performance and narrative art.
Podcasts
Themes for audio fiction podcasts.
Short Scoring Projects
Sketches
Short pieces I made for university assignments but did not develop into a full piece.
Theatre Composing
Theatre Sound Design
Other
Catalyze Impact incubates new AI Safety organisations. I was their first employee, and for a year and a half I co-ran the incubation program:
- Recruitment: finding promising founders through personalised outreach and social media campaigns.
- Selection: reviewing applications and test tasks, and interviewing candidates.
- Program design and logistics: designing the program, arranging speakers and venues, and organising events and trips.
- Participant support: handling requests from founders during, before and after the program.
I also built the systems everything ran on using Airtable bases and Python scripts that automated the repetitive parts of recruitment and selection, and I made some really great spreadsheets.
The Edinburgh Festival Fringe has around 3,500 shows. I used to read the programme cover-to-cover, but that still didn’t tell me much about the shows themselves and which ones I should really go see, so I built the tool I wanted instead: a chat interface where you can just ask the programme what you should go see.
Under the hood it’s a RAG pipeline which does semantic search over the festival data with ChromaDB vector storage, category filtering, and a FastAPI backend serving a React/TypeScript frontend.
Spotify Tools lets you set listening goals for artists, albums, and tracks you want to hear more of. It syncs with your Spotify listening history, tracks your progress, and generates playlists of exactly the music you still want to listen to. You also get detailed statistics about your listening habits.
Unfortunately, Spotify no longer verifies small apps from individual developers, so it is not publicly accessible. If you would like to try it, contact me with your email, and I can give you access.
ImpAmp is the soundboard Bedlam Theatre uses for live improv comedy, where a sound effect is only funny if you can find it before the performers move on. It supports multiple soundbanks, instant search, arming tracks, multiple sounds per pad, and Google Drive sync so you can share your soundbanks with the whole team.
This third version contains many improvements over the previous versions developed by the previous generation of IT, and was also an experiment in AI-driven development: I built it in Next.js using Claude 3.7 Sonnet and Gemini 2.5 back when agentic AI coding was just a few months old. It has been used to run shows ever since.
ML4Good runs 10-day intensive bootcamps that take people from “interested in AI Safety” to actually working on it. I was a teaching assistant at the March 2025 Europe camp where I taught the sessions on AI Agents, Adversarial Attacks, and AI Safety strategy, and coached participants through the rest of the curriculum.
Because the atmosphere at a bootcamp is just as important as the curriculum, I also ran the social side, including a welcome event, a murder mystery, lightning talks, and a Scottish ceilidh.
During university (and a little after), I took part in over thirty productions and festivals as production manager, producer, director, technician, composer, and actor. I also spent two years on the committee of the Edinburgh University Theatre Company, the student company that fully operates the Bedlam Theatre: as Business Manager and later President, I helped reopen the theatre after the Covid-19 pandemic and led its return as an Edinburgh Fringe venue in 2023. I also was on the committee for Theatre Paradok as Secretary, President and Treasurer, putting on a wide array of experimental shows all over Edinburgh.
Shows marked * took place in the Bedlam Theatre
Festivals
- Paradok Platform - Fringe Director - August 2024 (Just the Tonic during the Edinburgh Fringe)
- Bedlam Festival - Festival Director and Co-Programmer - January 2024 *
- Paradok Platform - Fringe Coordinator - August 2023 (Just the Tonic during the Edinburgh Fringe)
- Bedlam Festival - IT Manager - January 2023 *
- Give it a Go Week - Venue Manager - January 2023 *
- Paradok Platform - Treasurer - August 2022 (Just the Tonic during the Edinburgh Fringe)
- Freshers’ Plays - Creative Director/Coordinator - September 2022 *
- Welcome Week - Creative Director/Coordinator - September 2022 *
- Festival of New Theatre in Scotland - Programmer - March 2022 (Teviot Underground)
- Scottish Online Student Drama Festival - March 2021 (Online)
Shows
- Whatever You Want - Producer - April 2024 (Embassy Gallery)
- Glangtivity - Director - December 2023 *
- The Welkin - Sound and Projection Manager - October 2023 *
- Guards, Guards! - Composer - October 2023 *
- Julius Caesar - Production Manager - March 2023 (Teviot Debating Hall)
- Into the Pantoverse - Producer - December 2022 *
- The Rip Current - Co-Sound Designer - August 2022 (Pleasance Above)
- Ondine - Producer - March 2022 (Teviot Underground)
- A Midsummer Night’s Dream - Production Manager - March 2022 (Assembly Roxy - Central)
- Bedlam Haunted House - Composer/Sound Designer - October 2021 *
- Songs from the Bedlam - Creative Director - October 2021 *
- Catching Up - Tech Manager/Sound Designer - August 2021 (theSpace @ Symposium Hall)
- Zoogmalion - Producer - February 2021 (online)
- Trials and Tribulations - Lighting Designer - January 2020 *
- The Odyssey in 60 Minutes - Co-Director/Writer - January 2020 *
- William Shakespeare’s Christmas Carol - Sound Designer - November 2019 *
The Rip Current
Guards! Guards!
Acting
- Princess Ida - April 2025 (Pleasance Theatre)
- Glangtivity - December 2024 *
- Biolanthe - April 2024 (Summerhall)
- HMS Pinafore - April 2023 *
Black Lightning is the Ruby on Rails application behind bedlamtheatre.co.uk. It hosts the public website, show archive, and internal administration system of the Edinburgh University Theatre Company. This app keeps proposals, shows, seasons, and members organised and manageable for the committee and show teams.
I took over maintenance of a codebase that had outlived several generations of student developers and carried it through major upgrades, from Rails 5 all the way to Rails 8, modernising the stack and Dockerising deployment along the way. It is where I learned most of my web development and product skills, because you learn most when writing code that is actually used by users who need it to do their jobs.
I wrote my dissertation on “Ancient Rock Music”: the sound stalactites make when hit by a rubber mallet. The project was inspired by a visit to Luray Caverns, Virginia, home of the “Great Stalacpipe Organ”: an instrument that plays the cave itself.
The work had three parts: a physical simulation of struck stalactites using finite-difference and modal methods (approximating them as cantilever bars of variable diameter, in MATLAB), a field trip to record real stalactites, and a virtual instrument built in C++ with JUCE so anyone can play a cave from their Digital Audio Workstation.