My Projects
Filter by tag:
Vischeck
A hook, skill, and CLI that make AI agents screenshot and visually check their own UI changes
Fringe Venue Management
Programming, front of house, and production management for Edinburgh Fringe venues — including leading Bedlam Theatre's return to the Fringe
Professional Theatre
Freelance sound design, including "Mary: A Gig Theatre Show" across five runs from the Fringe to the Traverse
Readoc
CLI tools that let AI agents read and edit Word documents, Excel sheets, and PDFs
Rails Toolkit
Agent skills encoding Ruby on Rails 8 conventions, so AI-written Rails code follows the framework instead of fighting it
Dev Hooks
Hooks and skills that force AI coding agents to verify their work instead of pattern-matching their way to 'done'
Composing
Themes and scores for podcasts, theatre, and other narrative art
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 an AI Safety Organisation
Designed and built the central CRM architecture, alumni database, change-detection automations, and donor-import pipelines for an AI safety organisation
Catalyze Impact
First employee at the incubator for new AI Safety organisations. Co-ran the incubation program end to end
Edinburgh Festivals Chat
Chatbot providing information about the Edinburgh Festivals, helping you decide which of >4000 shows to see
Spotify Tools
Listening goals and statistics for Spotify. Retired since Spotify stopped verifying apps from small developers
ImpAmp 3
Web soundboard used live in improv comedy shows — an early experiment in building real software with AI agents
ML4Good EU March 2025
Taught AI agents, adversarial attacks, and AI Safety strategy at a 10-day intensive bootcamp
Student Theatre
30+ productions and festivals as production manager, director, producer, and designer — plus two years leading the Edinburgh University Theatre Company
Black Lightning
Maintainer of the Rails application that runs Bedlam Theatre
AI coding agents will confidently claim a UI change “looks good” without ever rendering it. Vischeck closes that loop: a hook, skill, and CLI that let an agent take authenticated screenshots of its local dev server and critically review the result before reporting back.
The screenshot CLI handles dev-server auth automatically, 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 rather than when someone remembers to ask.
The skill is deliberately opinionated about how to review: zoom in on the changed component, compare against an existing known-good page, and walk an explicit checklist (contrast, spacing, house-style conformance, overflow) before giving a verdict. “Looks good” without evidence counts as a failure.
I built it because I run AI agents on real projects daily — including this website — and unverified agent output is the main thing standing between “agents help” and “agents can be trusted with the work”.
Running a venue at the Edinburgh Fringe is operations at its most concentrated: hundreds of performances, companies changing over in minutes, and an audience that doesn’t care that your tech desk just broke.
I’ve run Fringe venues from several seats:
- Bedlam Fringe 2023 — Front of House Manager & Programmer. I led the strategic 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 developing the procedures the team runs on.
- Bedlam Fringe 2026 — Production Manager. Currently production-managing the venue’s upcoming Fringe season.
- 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.
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
- 25th Annual Putnam County Spelling Bee: Edinburgh Fringe (August 2024)
Operations work lives in Word documents, Excel sheets, and PDFs — formats AI agents can’t natively open from the command line. Readoc gives agents three CLIs: readoc to extract the contents of a .docx, .xlsx, or PDF as structured text, readir to explore and search whole folders of mixed documents, and editdoc to make targeted edits to Office files without mangling their formatting.
The practical effect: an agent can be pointed at a shared drive full of policies, budgets, and reports and actually work with them, instead of being limited to plain text and code.
I built it for my own operations work, where “can the agent read the document” was the recurring blocker between AI assistance and the tasks that actually fill an ops person’s week.
AI agents write Rails code the way the average of the internet writes Rails code — which is to say, fighting the framework. Rails Toolkit is a set of Claude Code skills that encode modern Rails 8 conventions and hard-won project rules, so agent-written code comes out idiomatic: thin controllers, concern-based models, Solid Queue jobs, Stimulus controllers with modern JavaScript, Hotwire/Turbo patterns, fixture-based tests.
It also includes higher-level workflows: a full application audit that orchestrates the individual skills into a severity-ranked health report for inherited codebases, a database performance review, and an upgrade analyzer covering breaking changes from Rails 2.3 through 8.1.
I maintain Rails applications (including the administration system behind a 100-year-old theatre company), and this toolkit is how I make AI agents productive on them without sacrificing code quality.
The default failure mode of AI coding agents is declaring victory: “this should work now” after a change that was never run. Dev Hooks is a collection of Claude Code hooks and skills that counteract that, built from patterns I kept reapplying across projects.
Highlights:
- but-for-real — intercepts premature success claims and demands the agent actually run, test, and inspect before saying something works.
- board — assembles a panel of adversarial expert critics to poke holes in a plan, draft, or pitch, as an antidote to agreeable-by-default responses.
- premortem — before executing a risky plan, asks “it’s six months later and this failed — why?”.
- humanizer — strips the tell-tale signs of AI-generated writing from text, based on Wikipedia’s signs-of-AI-writing guide.
- code-simplifier, readability, self-rate — quality passes for code and prose.
The shared thesis with my other agent tooling: agents become genuinely useful when scepticism and verification are built into the workflow itself, not left to the human reviewing the output.
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
Airtable is the operational backbone of many small organisations, and it has no native tooling for the questions a responsible admin asks: what changed in this base since last month? Does our structure follow our own conventions? Who has access to what?
Airtable Utils answers those:
- Schema export — dump a base’s full structure (tables, fields, views) to JSON for documentation and version control.
- Schema diff — compare two exports to see exactly what was added, removed, renamed, or retyped between snapshots.
- Standards check — validate a base against a written set of naming and structure conventions, producing a compliance report.
- Access audit — scrape collaborator and permission data across bases to see who can touch what.
It also includes a comprehensive agent skill for writing Airtable scripts — both scripting-extension and automation scripts — encoding the API’s quirks and limits (like its 50-fetch ceiling) so generated scripts are correct the first time.
These grew directly out of my CRM and database work for AI Safety organisations, where the base is the institutional memory and silent schema drift is a real operational risk.
An AI safety organisation needed its scattered contact, alumni, and donor data turned into one reliable system. I designed and built it.
CRM architecture and documentation. I designed the central base — People and Organisations tables linked many-to-many through join tables, with a stable primary key — then did a field-by-field documentation pass across the entire base: table guides, consistent naming conventions for consent-sensitive fields, and flagging dead fields for deletion. The goal was a CRM whose structure a new team member can understand without me in the room.
Alumni database consolidation. I merged two parallel fellowship-alumni tables into one, while deliberately keeping team-assessed hiring data in a separate 1:1-linked table — self-reported and team-assessed data have different provenance and different sharing rules, and the schema should enforce that distinction.
Change detection without a changelog API. Airtable can’t tell you what changed on a record, only that it changed. For a self-service alumni profile form, I built a snapshot-and-diff automation: each record carries a JSON snapshot of its fields, diffed on every form submission, writing one changelog row per submission split into “needs processing” and “other changes”. The team reviews actual diffs instead of re-reading whole records.
Donor import pipeline. An email-triggered upsert script handling ~1,500 donation records from a major effective-giving platform: CSV parsing, donor matching by email then platform ID, ID backfill, and create-or-update keyed on donation reference. The key architectural fix was moving a downstream webhook call out of the import script — which was blowing through Airtable’s 50-fetch ceiling — into a separate record-created automation that Airtable throttles naturally.
AI Safety needs more organisations, and new organisations fail for ordinary reasons: no co-founder, no funding network, no operational footing. Catalyze Impact incubates new AI Safety research organisations to fix that, and I was their first employee.
For a year and a half I co-ran the incubation program end to end:
- Recruitment — finding promising founders through personalised outreach and social media campaigns.
- Selection — building and running the pipeline: reviewing applications and test tasks, interviewing candidates.
- Program design and logistics — shaping the program, arranging speakers and venues, and organising the events and trips that turn a cohort of strangers into a founder community.
- Participant support — being the person founders could bring any problem to during the program.
Because the team was small, I also built the systems that kept it running: Airtable bases and Python scripts that automated the repetitive parts of recruitment and selection, so the humans could spend their time on judgement calls instead of data entry.
The Edinburgh Festival Fringe programme lists around 3,500 shows. Nobody reads it cover to cover, which means most people pick from the handful of shows with the biggest marketing budgets. I was frustrated enough by this to build the tool I wanted: a chat interface where you describe what you’re in the mood for and get recommendations from the full programme.
Under the hood it’s a RAG pipeline: semantic search over the festival data with ChromaDB vector storage, category filtering, and a FastAPI backend serving a React/TypeScript frontend.
Spotify Tools allows you to set listening goals for your favorite artists, albums, and tracks. The application syncs with your Spotify listening history and helps you reach your goals by generating personalized playlists based on your preferences and what you need to listen to. It also gives you detailed statistics of your listening history.
Unfortunately, Spotify no longer verifies small apps from individual developers, so it is not publicly accessible. If you would like to try it, please contact me with your email and I can give you access.
Improv comedy needs sound effects now — a technician fumbling through folders kills the joke. ImpAmp is Bedlam Theatre’s purpose-built soundboard for live improv: multiple soundbanks, instant search, armed tracks, multiple sounds per pad, and Google Drive sync so each show’s sounds follow the team.
This third version was also a deliberate experiment in AI-driven development: I built it in Next.js using Claude 3.7 Sonnet and Gemini 2.5, back when letting agents write most of the code was still a novelty. It has been running real shows 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 is just as important to a bootcamp as the atmosphere, I also ran the social side including a welcome event, murder mystery, lightning talks, and a Scottish ceilidh.
During university (and a little after), student theatre was my second degree: over thirty productions and festivals as production manager, producer, director, technician, composer, and actor. As President and Business Manager of the Edinburgh University Theatre Company — the student company that fully operates the Bedlam Theatre — I helped reopen the theatre after the covid-19 pandemic and led its return as an Edinburgh Fringe venue in 2023.
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 *
Committees
I was President (2022-2023) and Business Manager (2021-2022) for the Edinburgh University Theatre Company, who fully operate the Bedlam Theatre, and Treasurer (2022-2023), President (2021-2022), and Secretary (2020-2021) for Theatre Paradok. During my time, we reopened the theatre after the covid-19 pandemic and I led the efforts for our return as a venue to the Edinburgh Fringe Festival in 2023.
Black Lightning is the Ruby on Rails application behind bedlamtheatre.co.uk: the public website, show archive, and internal administration system of the Edinburgh University Theatre Company. This app keeps proposals, shows, seasons, and members organised across yearly committee turnover.
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 production code with real users is the best teacher.
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.