from Thomas F. "T.J." Maher Jr.
-T.J. Maher
Software Engineer in Test
BlueSky | YouTube | LinkedIn | Articles
Stories for Software QA Engineers shifting from manual to automated testing.
Help! Claude Sonnet is taking over this blog post! After Claude Sonnet wrote me an Over-Engineered Playwright Test Framework ( See GitHub Code ) it then blogged about it! Ugh. Talk about a superiority complex. At least, when pushed, it cites its sources in the Bibliography at the end of the post... Take it away, Claude!
Hello! I'm GitHub Copilot, powered by Claude Sonnet 4, and I'm excited to share insights from a project where I created an entire "Overengineered" Playwright test automation framework from scratch. While the name might suggest excess, every architectural decision was carefully crafted following established industry standards and best practices.
In this post, I'll walk you through the key industry-standard practices I implemented and explain why each one matters for enterprise-grade test automation. As an AI assistant trained on vast amounts of code and documentation, I've learned to recognize patterns that separate amateur scripts from professional frameworks.
We will talk about:
Remember that tiny little two-screen React Native app I created back in December 2025? The one that just had a Login Page and a Secure Area? Well, I may have gone a little overboard adding features to it again.
What started as a simple React Native Login Page demo for my AutomationGuild talk in April 2026 has become... way, way, way too much.
What's new in Detox Demo?
The project now uses: React Native, Yarn, Detox, Detox CLI, Allure Reports, Snyk, GitHub Actions, GitHub Workflows, GitHub Pages, Metro bundler, CocoaPods, Android Gradle configuration, iPhone simulators and Android emulators, and includes troubleshooting guides for both macOS and Windows.
All open-source. All documented. All completely unnecessary for what is essentially a Login button and a Logout button.
Because even a demo app that has hardcoded credentials (yes, tomsmith and SuperSecretPassword! are right there in plain text in credentials.ts) deserves security scanning!
I've added a new security.yml GitHub Actions workflow that:
package.json and yarn.lock for vulnerable npm packagesIt runs on every push to main, every pull request, and you can kick it off manually.
Snyk is free for public repositories. If it's free, it's for me, I'll take three.
The app now runs on Android! I've added:
Run locally on Windows 11 or macOS:
yarn start # Start Metro in one terminal yarn detox:android # Build and test in another
All 5 tests pass:
Since I'm developing on a Windows 11 machine these days, I asked GitHub CoPilot to generate comprehensive Setup for Windows 11 Local Development guide covering:
Plus a matching Setup for macOS Local Development guide for MacBook users.
I now run GitHub Copilot's code review feature on the codebase. All the source files created by GitHub Copilot now have a "Created by GitHub Copilot" comment at the top, because credit where credit is due!
Last month, I shared my experience using GitHub Copilot to create a React Native app from scratch to be used in my DetoxDemo project in my article, First Time Using GitHub CoPilot to Create a ReactNative LoginPage app. What Could Go Wrong?
This time, I used GitHub Copilot (Claude Opus 4.5) to create a GitHub Actions CI/CD workflow for running Detox end-to-end tests on Android. While GitHub CoPilot is incredibly powerful, it still required significant human guidance to get the workflow passing.
Detox Demo: https://github.com/tjmaher/detox-demo
I had a working GitHub Actions Workflow with ios-regression.yml and asked Copilot to create an Android version that matched. Despite this instruction, I had to repeatedly ask Copilot to compare against the iOS workflow to create the Android workflow, android-regression.yml.
The result? 14 commits, 17 hours, and a lot of lessons learned. Here's the timeline of what went wrong, and what finally worked:
Total Commits: 14 commits
Time Span: ~17 hours
![]() |
| The-Internet / Login Page |
![]() |
| Love dressing up the Apple logo! |