Özgür Çetintaş

Open to new roles

Özgür Çetintaş

Senior QA engineer who builds things. Eight years of making software trustworthy, from payment flows to video engines to AI features, and a few apps of my own on the App Store.

At work

  1. AI-driven end-to-end tester

    At work

    An LLM agent drives a real headless browser through payment funnels like a customer: answers quizzes, registers, pays with a declined card and then a successful one. Afterwards it checks what actually happened: the confirmation email, the purchase in the back end and the analytics events.

    • Playwright
    • LLM agents
    • function calling
    • MCP
    • Cloudflare Workers
    How it works
    Problem
    Our internal funnel builder ships many onboarding, quiz and paywall funnels, each ending in a real registration and payment. Checking them by hand before and after every release did not scale, and nobody had asked for automation. I built it on my own initiative.
    What I built
    A Playwright headless browser driven by an LLM agent (function calling) that reads the accessibility tree and acts like a customer: answers the quiz, registers, pays with a declined card and then a successful one in payment-provider sandboxes. Then it checks real outcomes, not the UI: the confirmation email, the purchase granted in the back end and the analytics events. It runs from the editor, on a schedule for regression, or from an AI assistant through MCP tools, with A/B variants, locales and viewports. Each run leaves step logs, screenshots, a session replay and a Slack alert on failure.
    What it caught
    Reviewing the tester’s own code, I found retry logic that could charge a payment twice (I fixed it) and a race condition in the cancel flow (a developer fixed it).
  2. Video engine regression suite

    At work

    With one colleague I built a Robot Framework suite that compares every rendered frame of a C/C++ video rendering engine with a golden reference and checks timing such as dropped frames. If a single pixel in the worst frame differs, the release is blocked.

    • Python
    • Robot Framework
    • Jenkins
    • C/C++
    How it works
    Problem
    Our core product was a cross-platform video rendering engine with a C/C++ core. Regressions were checked by a manually triggered process, and visual or timing bugs could reach a release.
    What I built
    In 2021, with one colleague, a Robot Framework suite with our own Python keyword libraries, running in a Jenkins pipeline I set up, still in use. It compares every rendered frame with a golden reference (PSNR on the worst frame, plus bit-exact MD5 checks per frame), and analyses timing from frame timestamps: jitter, dropped and duplicated frames. A fault injector generates streams with known defects to prove the checks actually detect them. Suites are tagged by requirement and run in parallel.
    What it changed
    Any result below the threshold blocked the release. It caught real failures caused by non-deterministic effects; each was root-caused with the engine team before the reference was updated. One flaky check taught me to verify the measurement first: the test sometimes captured a frame before rendering finished, so I made it wait for a reliable completion signal.
  3. Build and deployment platform

    At work

    The company's internal build and deployment platform: it replaced Bitrise for 10 mobile apps and cut build times from 40 to 13 minutes.

    • Java
    • Jenkins
    • Docker
    • Node.js
    • React
    • MongoDB
    How it works
    Problem
    Testers and stakeholders needed the right app build quickly, with clear versions, across many apps.
    What I built
    A platform on Java, Jenkins and Docker with a Node.js/Express/React/MongoDB front end that builds, distributes and tracks iOS and Android builds, with queued runs and automatic retries. Incremental builds and reusable submodule artifacts cut build times from 40 to 13 minutes.
    What it changed
    It replaced Bitrise for 10 apps, avoiding an estimated $24K a year in external tooling costs.
  4. Testing AI image generation

    At work

    Regression tests for the prompts behind AI image features, so user requirements are not lost on the way to the model.

    • Promptfoo
    • LLM evaluation
    • regression testing
    How it works
    Problem
    In our image-generation features, a user’s requirement, for example a specific colour or “no text or logo”, could get lost while the app built the prompt for the model.
    What I built
    Promptfoo test scenarios that check the generated prompt against the user’s requirements, and re-run the same inputs after every template change to compare old and new versions. The images themselves are reviewed manually.
    What it changed
    I made mandatory requirements explicit in the template and added each failure to regression. Store reviews complaining about irrelevant images went down.
  5. Mobile, web and API automation framework

    At work

    As Pixery’s first dedicated QA hire (2019 – 2022), I built its test automation framework from scratch: one Java codebase for mobile (Appium), web (Selenium) and API (REST Assured) tests, written as Cucumber scenarios and run with TestNG and Maven. I also set up the Jenkins CI/CD pipeline that runs it. It became the base of the regression suite that later grew to ~1,000 automated tests.

    • Java
    • Appium
    • Selenium
    • REST Assured
    • Cucumber
    • TestNG
    • Maven
    • Jenkins
  6. 3-D Secure 2.0 payment authentication

    At work

    At Finartz (2018 – 2019), with one colleague, I built the test automation framework for a 3-D Secure 2.0 Access Control Server and wrote 10,000+ data-driven Cucumber scenarios against the EMVCo, Mastercard and Visa specifications, plus API and performance tests. The server passed certification.

    • Java
    • Selenium
    • REST Assured
    • Cucumber
    • TestNG
    • Maven
    • JMeter

Experience

2022 – now
Senior Test Automation Engineer, Pixery Netherlands / Istanbul

Release quality for 20+ iOS, Android and web apps; ~1,000 automated tests; regression cut from 1–⁠2 days to 3–⁠4 hours.

2019 – 2022
Test Automation Engineer, Pixery Istanbul

First dedicated QA hire; built the quality function and its automation framework from scratch.

2018 – 2019
Software Test Automation Engineer, Finartz Istanbul

Test automation for a 3-D Secure 2.0 ACS that passed certification.

2017 – 2018
Software Developer, computer vision, Udentify Istanbul

C++ and Python with OpenCV on embedded camera systems for in-store analytics.

2013 – 2018
B.Sc. Computer Engineering, Kadir Has University

Built on my own

  1. TestLease

    Open source

    Open-source tool that stops parallel test runs from colliding on shared test accounts, with expiring leases, crash recovery and an MCP server for AI agents. Built for a real problem I hit at work.

    • open source
    • REST API
    • Playwright
    • MCP
  2. Trident

    On Maven Central

    A modular Java 21 web and API automation framework, consumed as a dependency rather than forked.

    Java teams often copy test plumbing from one project to the next until the copies drift apart. Trident provides a single Cucumber runner with a REST Assured API layer and a web layer, with mobile support on the roadmap. Teams generate a project from the archetype, add the modules they need and write feature files. It is developed against a legacy JSP banking application without test hooks, and a separate showcase project adopts it from Maven Central against an unrelated application. An open-source rebuild of the kind of Java framework I built at Pixery and co-built at Finartz.

    8 modules on Maven Central at v1.1.0 · 13 scenarios across 3 suites · 8s from archetype:generate to a green suite · 18 ADRs

    • Java 21
    • REST Assured
    • Cucumber
    • JUnit 5
    • Maven
    • GitHub Actions
  3. Kafka Ledger Lab

    Learning lab

    Testing Kafka event-streaming guarantees for a payments → ledger flow against a real broker.

    A Java and Spring Kafka service tested against real Kafka, PostgreSQL and Schema Registry through Testcontainers. The tests cover ordering, idempotency, dead-lettering, replay, consumer rebalances, a SIGKILL inside the at-least-once loss window, and database and broker outages. Most guarantees were first shown failing, or checked by breaking the code on purpose. A personal learning lab, not production experience.

    45 tests · 900 executions over 20 consecutive runs, 0 failures · 2 ADRs

    • Java
    • Spring Kafka
    • Testcontainers
    • PostgreSQL
  4. Shipped apps

    App Store

    Outguess and CipherBreaker are React Native / Expo apps I built and published on the App Store.

    • React Native
    • Expo
    • TypeScript

More on GitHub: Modern Quality Engineering Lab, TestPlan Studio

About me

I started as a developer. In my last year at university I wrote C++ and Python for live human detection on embedded Linux cameras, in a four-person startup. Then I moved into testing, and found that I enjoy breaking systems as much as building them.

At Finartz I co-wrote more than 10,000 data-driven scenarios for a 3-D Secure 2.0 payment authentication server against the EMVCo, Mastercard and Visa specifications; the server passed certification. In 2019 I joined Pixery as the first dedicated QA engineer and built the test process from zero. Since then I have built about 1,000 automated tests across mobile, web, API and back end, set up the CI quality gates that guard every release, and cut regression from one or two days to three or four hours. From 2022 to 2025 I led a team of up to four QA engineers.

I work daily with Claude Code, and I evaluate AI features with Promptfoo. I moved to the Netherlands in 2025 and live near Rotterdam.

Let's talk

I'm open to senior QA / test automation roles, and to AI and product engineering roles where quality matters. Based near Rotterdam.

Email
LinkedIn
linkedin.com/in/ozgurcetintas
GitHub
github.com/cozgur