I'm an SDET. I build Playwright test automation, CI pipelines that stay fast as the suite grows, and lately a lot of AI-assisted testing tooling.
Right now I'm lead SDET at FullStack, and I handle QA automation for a 200+ site portfolio at ThomasArts.
馃搷 San Diego, CA 路 LinkedIn 路 smailbestybay@gmail.com
Most of it lives in private repos, so here's what it looks like:
- A Playwright/TypeScript framework that runs two ways: locally against a throwaway Docker stack before deploy, or against live environments for the critical integration flows.
- Keeping CI feedback fast. Each run gets split across parallel machines that spin up their own test environments, so the runtime stays flat as the suite grows.
- A push to test pipeline with test selection filtering, so stakeholders can trigger the suites they care about themselves instead of asking me.
- AI-assisted testing with Claude Code and MCP. An orchestrator with sub agents, switching models depending on the task to keep token costs down. Most of the work is getting the right context to the agent, the prompt is the easy part.
- Took an old regression cycle from 10 hours to 2.5 by parallelizing 1,500+ Selenium and .NET tests in Azure DevOps.
- On the ThomasArts side: Lighthouse scores in the 90s and WCAG 2.2 AA across the portfolio, with post release pipelines checking 3 daily deployments right after they go live.
TCM and tcm-mcp are the part of the above that's open. TCM is a test case management tool that replaced our Google Sheets workflow, and tcm-mcp is an MCP server so the agents can read and write test cases instead of loading a whole test plan into context. I built the GitLab CI trigger path and the MCP server. (my PRs)
| Repo | What it is |
|---|---|
| pw-template | The Playwright starter I built for the ThomasArts sites. It crawls a site's public pages, generates a pages.ts, and gives every new site in the portfolio the same e2e setup and reporting. |
| qa-portal | Proof of concept for triggering test runs remotely. Django admin as the control panel, Celery and Redis for the long running suites, Playwright as the runner, all in Docker. |
| express-jwt-app | Small Express app with configurable JWT lifetimes. I use it as a target for practicing auth and session expiry automation. |
| pw-aria-snapshot repro | Minimal repro for playwright#38315. If a value in an aria snapshot has a colon in it, matching it with a regex throws "Nested mappings are not allowed in compact mappings". The issue is closed, but there was no real fix, so the repro is here for anyone who hits the same thing. |
- axe-html-reporter (PR #44) long strings were breaking the table layout in the accessibility report. Still open, so I've been running a patched copy.
- Django (#16220, #16213) small fixes to the git workflow docs for new contributors.
- django-debug-toolbar (#1687) divide by zero guard in
timer.js.
Testing: Playwright 路 Selenium 路 Cypress 路 Jest 路 Storybook 路 Postman 路 Reqnroll/SpecFlow/Cucumber 路 accessibility (axe, WCAG 2.2) 路 AI-assisted testing Languages: TypeScript 路 JavaScript 路 C#/.NET 路 Python 路 SQL 路 PHP 路 Java CI and infra: Docker 路 GitHub Actions 路 Jenkins 路 GitLab CI 路 Azure DevOps 路 ArgoCD 路 AWS 路 Linux Also build: React 路 Node 路 Django 路 Laravel
- NabePero Video, a site for a video post production company. React and MaterialUI (repo).
- Ourtube, custom YouTube feeds in Django. My capstone for Harvard's CS50 Web.


