Skip to content

Available for full-time roles & freelance projects

Joseph Quiñones ·QA Automation Engineer&AI & Workflow Automation Developer

I make software reliable, and make busywork disappear.

QA Automation Engineer by day, testing a high-traffic sportsbook and esports platform. Freelance automation developer for small teams who are tired of doing the same work by hand.

I build test automation that teams actually trust.

5+ years in QA and 8 years in tech. I design Playwright and Katalon frameworks, wire them into CI/CD, and use AI to move faster without cutting corners.

I automate the repetitive work your team does by hand.

Lead follow-ups, content pipelines, data entry between tools. I build automations that run on their own, and because I am a QA engineer, they ship tested.

Example automated test run: QA checks and lead follow-up automations, all passing.
years in quality assurance
5+
years in tech
8
automated betting journeys per brand, run in parallel
35+
sports & esports titles under automated sanity checks
10
automated follow-up stages per lead, zero manual chasing
3
automations running headless on Linux VPS
24/7

Selected work

Things I've built

Full-time engineering and freelance client work. Switch the view above to see each project explained for hiring managers or for business owners.

Selected work

Engineering case studies

Built at work, so code and company data stay private. These are the architecture, the hard problems, and a generic version of the key patterns.

Results

What automation looks like in practice

Real projects, explained without the jargon: the problem, what I built, and what changed.

01Full-time

Sportsbook E2E Regression Framework

  • Playwright
  • TypeScript
  • GitHub Actions
  • Custom reporters
  • Teams webhooks

A layered Playwright + TypeScript suite that runs 35+ real betting journeys across multiple brands and environments in parallel, and reports straight into Teams.

  • Four-layer architecture: page objects → reusable flows → business test cases → spec suites. Each layer has a strict contract: pages hold no assertions, flows throw, test cases record.
  • Continue-on-failure step runner: one broken step never hides the rest. Failed bets are cleaned up in-app and the page is reloaded only if still dirty. A dead tab aborts the run at once instead of timing out on every step.
  • One Playwright project per brand, generated from config: brands run side by side locally with a single login each. CI runs on a self-hosted runner.
  • Custom reporters: timestamped, auto-pruned, zipped HTML reports, plus a plain-English run summary (“timed out waiting for the betslip”) posted to Teams as an Adaptive Card.
  • Flakiness guardrails written from real incidents: prove every action landed, read only settled state, locate by content not position, each test owns its start state.
The problem
A betting site with dozens of critical flows (bets, cash-out, live scores) across several brands and environments. Far too many to click through by hand before every release.
What I built
An automated regression suite that plays through 35+ real user journeys per brand, in parallel, and posts a pass/fail summary to the team chat.
The result
Every release gets a full check, and failures arrive as readable sentences instead of stack traces, so the right person can act right away.
  • 35+ scenarios
  • 4-layer architecture
  • Parallel per brand
  • 3 environments
  • 170+ commits
▸ The pattern: record every step, keep going, fail once with the full picture (generic example)
export async function runStep(name: string, results: StepResult[], fn: () => Promise<void>) {
  try {
    await fn();
    results.push({ name, ok: true });
  } catch (err) {
    if (isSkip(err)) throw err; // genuine skips stay skips
    results.push({ name, ok: false, error: firstLine(err) });
  }
}

export function assertAllPassed(results: StepResult[]) {
  const failed = results.filter((r) => !r.ok);
  if (!failed.length) return;
  throw new Error(`${failed.length} step(s) failed:\n` +
    failed.map((f) => `  ✗ ${f.name}\n    ${f.error}`).join('\n'));
}

How it flows

  1. 01Suite per brand
  2. 02Business test cases
  3. 03Reusable flows
  4. 04Page objects
  5. 05Step results
  6. 06HTML report + Teams summary
02Full-time

AI-Assisted QA Workflow with Claude Code

  • Claude Code
  • Custom Skills
  • Hooks
  • CLAUDE.md
  • Python

Set up the test repo so an AI agent can write, review and fix tests safely, following the same rules as the team.

  • Project CLAUDE.md with hard rules, a workflow routing table and an architecture doc the agent must read before touching tests.
  • Four custom Skills: QA ticket → correctly layered test case; senior-QE code reviewer backed by a Python anti-pattern scanner; wait/timeout optimization; behavior-preserving refactoring.
  • Hooks enforce the rules mechanically: no direct pushes to main, secrets never printed, blocked shells rerouted.
  • Self-improvement loop: every fixed failure becomes a written guardrail with the incident recorded, then the codebase is swept for the same class of bug.
  • Every change lands through a PR, after a verification run and a review pass.
The problem
AI coding tools are fast but careless. They guess, skip reviews and can leak secrets.
What I built
Rules, skills and guard hooks that make the AI follow the team’s process: verify before commit, review before merge, never touch secrets.
The result
Tests get written faster, reviewed the same way every time, and the same bug doesn’t happen twice. I bring this approach to every client build.
  • 4 custom skills
  • Hook-enforced rules
  • Review before every merge
  • Incident-driven guardrails
▸ The pattern: a hook that blocks rule-breaking commands before they run (generic example)
// PreToolUse hook: exit code 2 blocks the command and tells the agent why
const cmd = JSON.parse(stdin).tool_input?.command ?? '';
const block = (why) => { console.error(`Blocked: ${why}`); process.exit(2); };

if (/git\s+push\b.*\bmain\b/.test(cmd)) block('main takes no direct pushes. Open a PR.');
if (/\.env(?!\.example)\b/.test(cmd))      block('secrets stay out of output.');
process.exit(0);

How it flows

  1. 01QA ticket
  2. 02Test-case skill
  3. 03Verification run
  4. 04Reviewer skill + scanner
  5. 05PR merged
  6. 06Guardrail updated
03Full-time

ChatOps Bridge: Teams ↔ GitHub Actions

  • Cloudflare Workers
  • Power Automate
  • GitHub Actions
  • Adaptive Cards

The QA team triggers test runs from a Microsoft Teams message and gets results back as Adaptive Cards.

  • Cloudflare Worker receives Teams requests via Power Automate and dispatches GitHub Actions workflows.
  • Results are posted back to the channel as Adaptive Cards: pass/fail, duration, report link.
  • No one needs repo access or the Actions UI to run a suite.
The problem
Running a job meant opening another tool, finding the right button and waiting around for the result.
What I built
A chat command that starts the job and posts the result back into the same chat.
The result
Anyone on the team can run it and see the outcome without leaving the app they already use.
  • Serverless
  • Zero new logins for the team
  • Results in-channel

How it flows

  1. 01Teams message
  2. 02Power Automate
  3. 03Cloudflare Worker
  4. 04GitHub Actions
  5. 05Adaptive Card result
04Freelance

WhatsApp Lead Follow-Up Automation

  • Python
  • Playwright
  • Google Sheets
  • Linux VPS
  • n8n
  • Evolution API

Inbound website leads get followed up on WhatsApp automatically at 24 hours, 3 days and a few weeks later.

  • Python + Playwright bot drives WhatsApp Web with human-like per-character typing across multiple instances.
  • Google Sheets as a lightweight CRM: scheduled follow-ups, spaced sends, automatic STOP opt-out.
  • Runs headless on a Linux VPS. Alternative Evolution API + n8n (Docker) architecture designed for scale.
The problem
Real estate leads went cold because nobody had time to follow up, and the ones who did forgot.
What I built
A bot that messages every new lead on WhatsApp and follows up on a schedule, tracked in a simple Google Sheet.
The result
Every lead gets followed up on time without anyone remembering to. People who reply STOP are removed automatically.
  • 3 follow-up stages
  • Auto STOP opt-out
  • Google Sheets CRM
  • 2 budget tiers

Lean tier

Python + Playwright bot on a small VPS. Lowest running cost.

Scalable tier

Evolution API + n8n in Docker. More instances, easier to extend.

How it flows

  1. 01Website lead
  2. 02Google Sheets CRM
  3. 03Scheduler: 24h · 3d · weeks
  4. 04WhatsApp message
  5. 05STOP opt-out

Also built

Services

What I can automate for you

Built by a QA engineer, so every automation is tested against edge cases, failures and opt-outs before it goes live.

01

Lead follow-up automation

New leads get a WhatsApp or email reply in minutes and timed follow-ups after that, logged in a sheet or your CRM.

Good for: Real estate, clinics, agencies

02

Connect your tools

n8n workflows that move data between forms, Google Sheets, CRMs like GoHighLevel, and chat, so nobody copy-pastes.

Good for: Any team with repetitive admin

03

AI content pipelines

Turn videos, transcripts or notes into ready-to-post content with AI, with a human review step before publishing.

Good for: Coaches, trainers, creators

04

Testing for your web app

Automated Playwright checks for your sign-up, checkout or booking flow, run before every release.

Good for: Startups and small SaaS

Toolbox

Skills

Test Automation

  • Playwright (TypeScript)
  • Katalon Studio (Groovy)
  • Page Object Model
  • Custom fixtures
  • Regression & sanity suites
  • Cross-browser testing

API & Performance

  • JMeter
  • API testing
  • Performance testing
  • Disaster-recovery (DR) load testing

AI & LLMs

  • Claude Code
  • Custom Skills
  • CLAUDE.md agentic workflows
  • Prompt engineering
  • LLM-assisted test design & code review

Workflow Automation

  • n8n
  • Evolution API (WhatsApp)
  • Playwright Python bots
  • Google Sheets as CRM
  • Buffer
  • Higgsfield
  • GoHighLevel integration

DevOps & Cloud

  • GitHub Actions
  • TeamCity
  • Docker
  • Linux VPS (Ubuntu)
  • Cloudflare Workers
  • Power Automate
  • Microsoft Teams webhooks

Data & Monitoring

  • SQL
  • Grafana
  • Kibana
  • Jira
  • Obsidian knowledge bases

Experience

8 years in tech, 5+ in quality

↓ Download full CV (PDF)
  1. Freelance AI & Automation Developer

    2026 – Present

    Direct clients · Remote

    • · WhatsApp lead follow-up automation for real estate
    • · Serverless failover proxy on Cloudflare Workers
  2. QA Automation Engineer

    May 2022 – Present

    Inplay Matrix · Makati

    • · Built the Playwright + TypeScript regression framework from scratch (multi-brand, parallel, Teams reporting)
    • · Set up Claude Code with custom Skills and hooks so AI writes and reviews tests under team rules
    • · Katalon (Groovy) suites for esports betting
    • · Teams ↔ GitHub Actions ChatOps bridge
    • · Introduced AI-assisted QA and Obsidian knowledge bases; trained the team on DR load testing
  3. QA Engineer

    Apr 2021 – May 2022

    Inplay Matrix · Makati

    • · Functional, regression and exploratory testing on web and mobile betting products
  4. System Engineer

    Jul 2018 – Apr 2021

    Tata Consultancy Services · Taguig

    • · Automated mailbox migrations and report extraction with PowerShell and ServiceNow

Education · BS Aviation Information Technology, National Aviation Academy of the Philippines

Process

How working together goes

  1. 1

    Short call

    You walk me through the task that eats your time. I tell you honestly if automation is worth it.

  2. 2

    Build & test

    I build it and test it like a QA engineer: edge cases, failures, opt-outs. You see it working before launch.

  3. 3

    Hand-off

    You get a walkthrough, simple docs and full ownership. Support is available if you want it.

Contact

Hiring, or have a task to automate?

Let's talk about the role.

Tell me what eats your team's time.

Send a short note about the repetitive task. I'll reply within a day with whether automation makes sense and roughly what it would take.Open to QA automation and SDET roles, remote or Metro Manila. Happy to walk through any of the frameworks above in detail.

Makati, Metro Manila, PH · GMT+8 · works with US, EU & APAC hours