bacelar@ci

test.describe('Bruno Bacelar', () =>

I break software
for a living.

Senior QA Automation Architect. Twenty years in software, the last eight building the test frameworks that catch failures before your users do. Playwright, Cypress, TypeScript, and lately, AI that writes tests with me.

test.describe('selected work')

Evidence, not adjectives.

Four engagements. Hover a card to see its trace: how each project moved from audit to green.

MCAP · Framework rearchitecture

passed

One Cypress codebase, every lender brand

Canada's largest independent mortgage finance company had a test suite splitting at the seams across lender brands. I rearchitected it into a single multi-lender Cypress framework: shared specs, per-lender configuration, hundreds of tests stabilized and running in Azure DevOps on every merge.

CypressTypeScriptAzure DevOps

GLE · Built from zero

passed

An API framework that enforces its own standards

Greenfield API automation in .NET 8 with NUnit and xUnit, plus custom Roslyn analyzers that catch violations of the team's own conventions at compile time. The framework reviews your code before your reviewer does.

.NET 8NUnit / xUnitRoslyn analyzers

QA Pilot · Founder project

running

AI that writes the test cases nobody has time for

A test case generator that reads your Jira tickets, Azure DevOps work items and GitHub pull requests, then drafts structured test cases on the Claude API. Built because every team I have joined had the same backlog of untested acceptance criteria.

Claude APINext.jsTypeScript

Olea Connects · CTO, Olive Social Impact

running

A membership platform for Canadian nonprofits

As co-founder and CTO I lead the full technical build: Next.js 14, Supabase, auth, payments and member management. A two-person company shipping a real product for organizations that cannot afford enterprise software.

Next.js 14SupabaseProduct leadership

expect(stack).toBeBattleTested()

Six suites, all green.

No percentage bars. A capability either survives production or it does not.

E2E automation

Playwright · Cypress

8 years, from first spec to framework governance

✓ pass

Languages

TypeScript · C# · SQL

Typed everywhere. Untyped test code is a bug factory

✓ pass

API testing

REST · NUnit · xUnit · Postman

Contract-first, environment-agnostic

✓ pass

CI/CD

Azure DevOps · GitHub Actions

Pipelines with quality gates, not decoration

✓ pass

AI in QA

Claude API · test generation · agentic workflows

The part of the stack that did not exist 3 years ago

✓ pass

Mobile

Appium · BDD / Gherkin

Earlier chapter, still in the toolbox

✓ pass

beforeAll('the person')

Twenty years of finding what breaks.

I wrote my first line of production code in Brazil more than two decades ago. Since then I have been a developer, a consultant, and for the last eight years the person teams call when their test suite is flaky, slow, or missing entirely.

I am based in Canada, work in English and Portuguese, and I am at my best in the gap between engineering and quality: building frameworks developers want to use, not frameworks they route around.

Outside of work I write psychological thrillers under a pen name. It turns out that hunting plot holes and hunting bugs are the same skill, and I cannot switch either one off.

test('hire bruno', async () => ...)

Your suite is failing? Good. That means there is something worth fixing.

I take on QA architecture engagements, SDET contract work and advisory on bringing AI into testing workflows. English or Portuguese, remote-first.