Open to senior AI engineering roles
Howard PantonSenior Lead Engineer, FrontendM2A Media, March 2018 to nowCV (PDF)
I manage two frontend developers and lead frontend on a production Angular platform, with a remit for code quality and automation. Most of my own work now ships through Claude Code agents, and I want to do that for a team full time: designing the agent workflows, skills and guardrails that let engineers ship faster without lowering the bar.
Angular 8 → 22, since 2019Nx monorepo, 27 micro-frontendsTypeScript · RxJS · Signals · TailwindJest · Cypress · Storybook · Jenkins · AWS
The company
M2A Media is an AWS-native cloud broadcast platform. It orchestrates live video contribution, transformation and distribution for broadcasters, sports rights owners and streaming platforms. The console is the multi-tenant web app operators use to schedule live events and to route, monitor, package and clip streams across AWS media services.
Since May 2026 most of my delivery has run through Claude Code. In June the team started a shared agent library in the repository: a CLAUDE.md of non-negotiables, 34 skills that each own one area of the codebase, and 9 subagents. I made its first commit and set its direction; a developer on my team built the per-ticket pipeline and most of the skills, and 49 of the library's 160 commits are mine. I wrote the layer that lets agents work unattended: sprint runs, the bug-board sweep, browser QA, test planning, session handovers and ticket writing.
The bug-board sweep, one ticket per run
What went wrong, and what changed
In September an agent hand-typed a submodule commit hash during a release-branch merge, one hex digit wrong. Git accepted it; five builds in a row failed at checkout with an error that looked like a git fault. The fix went into the skill library (hashes are captured from git commands and checked against the remote before any commit) and a hook now blocks any commit that stages a submodule pointer unless the message says the bump is deliberate.
I built M2A's first dashboard console in 2018 and started the current cloud console from an empty repository in October 2019. It is now an Nx monorepo of 27 micro-frontends on Angular 22, used to schedule live events and to route, monitor, package and clip streams.
Joined M2A Media. Built the first dashboard console from its first commit: 1,816 of its 1,865 commits, in Angular 6 with Angular Material, D3 and Chart.js.
Started the cloud console: Angular 8, a component library with Storybook and Jest in the first week, Cypress and an Nx monorepo by December.
Angular 11 to 15, including the Material migration. TSLint to ESLint, a mock API server for UI and E2E tests, Tailwind, Sentry, Auth0 login and semantic-release versioning.
Led the micro-frontend architecture from 13 modules at the end of 2023 to 25 by the end of 2025 (27 today). Stepped Angular 16, 17 and 18 in one day, one version per commit, then 19 and 20.
Agentic delivery, the release engine, the quality gates and the performance baseline. A developer on my team ran the Angular 21 and 22 upgrades.
I own the console's Jenkins pipeline and the release engine behind it: 213 of the pipeline's 255 commits since January 2026 are mine. I set its roadmap of 25 tickets in six phases, from "a red build means a real failure" to every E2E domain in CI and the release gate.
In November 2025 I rebuilt the pre-push gate every change, human or agent, must pass: ESLint on changed files, a spec beside every changed component or service, and 80% Jest coverage thresholds per push.
Performance used to be judged by feel. With a developer on my team I set up a lab baseline for the console's data-heavy pages, then turned it into a Jenkins job that measures each release under fixed conditions (production build, lab mocks, throttled network, cold cache, 5 to 10 runs per cell) and flags regressions. I also designed the console's GA4 event tracking, with a documented event catalogue.
AI engineering
Frontend
Quality and performance
Delivery