Back to Home

WORK EXAMPLES

Real work. Real impact. Quality in action.

What I do

I test beyond the happy path, investigate defects to root cause, and build automation that makes quality measurable.

Manual Testing
Functional, UI/UX, regression, edge cases
Automation
Playwright, TypeScript, JavaScript
API Testing
API validation, network inspection, DevTools
Test Case Design
Risk-based, detailed, reusable
Defect Management
Root cause, evidence-backed
Desktop Application

QA AI Dashboard (Electron)

Live test execution, execution history, and Claude-powered root-cause analysis — a functional desktop QA application built solo, not a mockup.

ElectronPlaywrightTypeScriptClaude AI
400+
Test Cases
20+
Defects Found
1
Platform Built
100%
Evidence Captured
Automation Framework

Playwright Suite (TypeScript)

The shared evidence-capture fixture every test in the root suite extends — auto-attaches a screenshot, console log, and network log to every run, pass or fail.

TSfixtures/baseFixtures.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export const test = base.extend<BaseFixtures>({
autoDiagnostics: [
async ({ page }, use, testInfo) => {
page.on('console', (msg) => consoleLines.push(
`[${msg.type()}] ${msg.text()}`));
 
await use();
 
const status = testInfo.status === testInfo.expectedStatus
? 'Pass' : 'Fail';
await page.screenshot({ path: screenshotPath, fullPage: true });
await testInfo.attach(`evidence-${status.toLowerCase()}`, {
path: screenshotPath, contentType: 'image/png' });
},
{ auto: true },
],
});
PlaywrightTypeScript
58+
Test Suites
400+
Test Cases
9
Test Tiers
100%
Evidence-Backed
Functional Runner

Condition-Based Assertions (JavaScript)

Real assertion helpers from the standalone functional runners — condition-based waits with real timeouts, never page.waitForTimeout().

JSrunner.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
async function assertVisible(locator, msg, timeout = 8000) {
try {
await locator.first().waitFor({ state: 'visible', timeout });
} catch {
throw new AssertError(msg || 'Expected element to be visible');
}
}
 
async function assertText(page, text, msg, timeout = 8000) {
const loc = page.getByText(text, { exact: false });
try {
await loc.first().waitFor({ state: 'visible', timeout });
} catch {
throw new AssertError(msg || `Expected page to contain: ${text}`);
}
}
JavaScriptPlaywrightNode.js
20+
Test Suites
5,000+
Assertions Run
0
Arbitrary Sleeps
Real
Condition Waits
Impact
Better Quality
Find defects earlier and validate critical workflows before release.
Efficient Releases
Repeatable automation and evidence reduce manual verification effort.
Actionable Defects
Clear reproduction steps, root-cause investigation, and supporting evidence.
Business Value
More reliable releases with measurable QA coverage and traceability.
My Testing Process
01
Discover
Map the product surface — pages, workflows, roles, integrations, and risk areas — before writing a single assertion.
02
Architect
Design tiered suites (Smoke → Regression → Security → E2E) so critical signals stay visible and execution remains maintainable.
03
Automate
Real assertions, condition-based waits, no arbitrary sleeps — tests that fail for the right reasons.
04
Investigate
Every failure gets investigated to root cause, supported by evidence and reproducible steps.
05
Report
Professional, stakeholder-ready output. Never a bare pass/fail — always what, why, risk, and next steps.
06
Verify
Nothing is marked fixed until it's independently re-tested against real evidence.
400+
automated test cases
20+
production defects found
1
QA platform built solo
100%
of runs produce evidence