I’m Ajinkya, a quality engineer who builds the tools that make releases boring.
Seven years of test automation across payments, security platforms and composable commerce. These days I lead quality at Orium and ship open-source tooling for testers on the side.
Experience
- 2023 – NowOriumStaff Quality Analyst
- 2022 – 23PLATO · OLG DigitalTest Automation, Web & Mobile
- 2021 – 22Metron SecuritySecurity Platform QA
- 2019iACCESS · Ministry of Ed.QA Co-op
- 2019 – 21Lakehead UniversityMaster of Computer Science
Selected work
Open source · Client work · ResearchAn MCP server that turns five web scanners into one prioritized defect list and a release verdict.
A Playwright page object generator that proves every locator against the live DOM, and emits nothing it cannot prove.
A load test reported a 49% failure rate. The defect was in the script, and fixing it changed the conversation with the client.
Golden datasets, LLM-as-judge scoring and tracing to catch hallucinations before they reach users.
What I do
I help engineering teams ship with confidence by building test systems that are fast, trustworthy and cheap to maintain.
- Test automation architecturePlaywright, Selenium, Appium, Cypress
- Performance engineeringk6, JMeter, Grafana, Datadog
- Payments & checkout QAStripe, Adyen, Avalara, PayPal, Visa, Mastercard
- AI quality & evalsDeepEval, Promptfoo, LangChain, Arize Phoenix
- Accessibility testingAxe, pa11y, Level Access
- CI quality gatesJenkins, GitLab CI, sharded parallel runs
- Security-minded testingOWASP Top 10, OSINT, Semgrep, SIEM/SOAR platforms
- Release authorityGo / no-go calls, triage, defect escape tracking
About
A staff quality engineer with 7 years of making releases predictable.
Story
I’m Ajinkya Kunjir. I live in Kanata, Ottawa, and work remotely as a Staff Quality Analyst at Orium, a composable commerce consultancy in Toronto. I joined as an SDET in 2023 and now own quality for client releases, including the go / no-go call.
Before Orium I automated web and mobile payment flows at PLATO Consulting for OLG Digital, and tested enterprise security platforms like QRadar, Splunk and ServiceNow at Metron Security. That security work never left me: I study the OWASP Top 10 and PortSwigger’s Web Security Academy, and I hold the IBM Cybersecurity Analyst certificate.
Outside the day job I build open-source tools for testers. I hold a few strong opinions: flakiness is usually a locator design problem, load test failures are often harness defects, and coverage targets tend to make quality worse.
Focus
Performance is where most of my work starts. I build load suites in k6 and JMeter, and spend as much time proving the harness honest as I do the system under test. At Orium that work has delivered 20–30% latency improvements, with Grafana and Datadog dashboards the client teams actually read.
The other half is web security testing. I work from OWASP fundamentals and use OSINT techniques to look at an application from the outside in: what is exposed, what leaks, and what a scanner never thinks to ask.
Lately most of my energy goes into agentic QA. I build AI workflows for client teams — agents that draft and maintain tests and run inside CI, with evals around them so we can tell when the agent is wrong rather than merely confident. The judgement stays with the engineers; three junior QA engineers now run these workflows day to day.
Education
- Master of Computer ScienceLakehead University, Thunder Bay · 2019–2021
- B.E. Computer EngineeringPune University
Certifications
- IBM Cybersecurity AnalystIBM
- AI Agent Developer SpecializationVanderbilt University
- Cloud Digital LeaderGoogle Cloud
Get in touch
If you feel like talking shop about QA, agentic testing or consulting work, get in touch — it’s the kind of conversation I’ll always make time for.
ajinkyajr101@gmail.comOpen source · MCP server · 2026
nfunc-mcp
// claude_desktop_config.json { "mcpServers": { "nfunc": { "command": "npx", "args": ["nfunc-mcp"] } } } › "Is the checkout page ready to ship?" P1 2 blockers P2 5 should-fix P3 16 notes verdict BLOCK RELEASE sample output, illustrative
- Role
- Creator & maintainer
- Team
- Solo
- Status
- v0.8 on npm
- Stack
- TypeScript, MCP (stdio), Lighthouse, pa11y, ESLint, Semgrep, PageSpeed Insights
Overview
nfunc-mcp is an open-source Model Context Protocol server that gives an AI assistant a full non-functional quality check of a web page. It runs performance, accessibility, code quality and security scanners, then returns one prioritized defect list with a release verdict.
Challenge
Every scanner speaks its own dialect. Lighthouse gives scores, pa11y gives WCAG codes, Semgrep gives rule IDs. Someone still has to translate five reports into one answer to the question a release manager actually asks: can we ship this?
Approach
- Wrapped Lighthouse, pa11y, ESLint, Semgrep and PageSpeed Insights behind a single stdio MCP server in TypeScript.
- Normalized every finding into one defect shape and ranked it P1, P2 or P3 by user and business impact.
- Added a release verdict so the output ends in a decision, not a dashboard.
- Kept lab data and field data separate, since they often disagree.
Results
Published to npm as nfunc-mcp under the ISC licence, with the source on GitHub. Launched with a LinkedIn post and article, with follow-ups planned on conformance and lab-versus-field data.
Open source · Playwright · 2026
Notary-POM
$ notary-pom crawl -c demo.config.js 1 pages, 123 elements, 4 unresolved. strategy count role ........................... 56 css (positional, fragile) ...... 39 testId ......................... 24 from the README walkthrough against scrapingcourse.com/ecommerce
- Role
- Designer & builder
- Team
- Solo
- Status
- v0.1 on GitHub
- Stack
- TypeScript, Playwright, CLI with a thin MCP wrapper
Overview
Notary-POM opens a real browser, waits for the page to stop moving, harvests every interactive element, and then tries a ladder of locator strategies against the running DOM until one provably resolves to the exact element it observed. What it cannot prove, it refuses to emit. You get page objects, a smoke spec that passes on first generation, and a checked-in JSON notebook recording every decision and every rejected candidate.
Challenge
Hand-writing page objects is slow, and brittle locators are the main source of flaky UI tests. Generators that skip verification just move the flakiness to day one.
Approach
- Rank locator candidates and prefer roles and labels over CSS.
- Verify every locator at generation time, before code is written.
- Deterministic naming, with optional LLM refinement.
- Generated base class plus a hand-owned subclass, so regeneration never overwrites your code.
- Pass-through
contextOptions(storageState, extraHTTPHeaders, httpCredentials) for authenticated pages later.
Status
Public on GitHub since September 2026 under the Apache-2.0 licence, at v0.1.0 and not yet published to npm. The CLI installs as notary-pom with the shorter alias npom, and crawl, generate, diff and build:pom are also available as npm scripts. diff classifies element and page drift by severity and carries a severity exit code, so a re-crawl reads as a diff of what changed on the site. Public storefronts work today; authenticated flows are next.
The project was called POMBuilder until the September rename; the MCP tool names still carry the old prefix.
Performance engineering · Client work at Orium
The 500s that weren’t the server
export const options = { scenarios: { join: { executor: 'shared-iterations', // was: per-VU loops vus: 30, } }, }; const key = idempotencyKey(vu, iter); // deterministic, no collisions retry(req, { max: 3 }); // bounded check(res, { 'CREDIT confirmed': ... }); // gate before next step
- Role
- Performance test lead
- Scale
- 30 virtual users, k6 cloud
- Signal
- 49% HTTP 500 rate
- Stack
- k6, Grafana, Datadog
Overview
A cloud load test of a payment-backed audience-join flow came back with almost half of all requests failing with HTTP 500. On paper the service looked broken.
Challenge
A number like 49% gets escalated fast. Before anyone started tuning the service, the test itself needed to be proven trustworthy.
Approach
- Traced the failures back to the harness: virtual users were colliding on shared state and retrying without limits.
- Moved to a
shared-iterationsexecutor so work was split cleanly across users. - Generated deterministic idempotency keys per user and iteration.
- Bounded retries, and added a CREDIT confirmation gate before each next step.
Results
The rewritten script removed the false failure signal, so the team could focus on real bottlenecks. More broadly, k6 work at Orium has delivered 20–30% latency improvements, with Grafana and Datadog dashboards adopted by client teams.
AI quality · 2026
Evaluating agentic systems
# promptfooconfig.yaml (excerpt) tests: - vars: { question: "What is the refund window?" } assert: - type: llm-rubric value: "Answer matches the golden policy text" - type: contains value: "30 days" illustrative example
- Role
- Quality engineer
- Focus
- Hallucination and tool-use checks
- Method
- Golden dataset, LLM-as-judge, string match
- Stack
- DeepEval, Promptfoo, LangChain, Arize Phoenix
Overview
Agentic systems fail differently from regular software. The same input can produce different output, so pass or fail needs a judge, not just an assertion.
Challenge
Catch confident wrong answers before users see them, without a human reading every response.
Approach
- Built golden datasets of expected answers for the flows that matter most.
- Combined LLM-as-judge scoring with deterministic string-match metrics.
- Ran suites in DeepEval and Promptfoo, with LangChain and Arize Phoenix for tracing.
- Worked in Claude Code daily to build and test agentic workflows, and folded AI into CI and test creation.
Results
Evals caught hallucinations by comparing responses against the golden set, turning a vague worry into a test that fails.