QA Audit Report — adscalculator.xyz

QA profile: Hermes QA Specialist (read-only audit — no source code modified)
Date: 2026-08-28
Repo: D:\GitHub\adscalculator-xyz (branch main, up to date with origin/main)
Live: https://adscalculator.xyz
Git status at start: ✅ clean working tree (git status → "nothing to commit, working tree clean"). No uncommitted changes that could fake bugs.


Executive Summary (на български)

Пълният QA одит на целия сайт засече 12 реални дефекта: 6 Critical, 1 High, 3 Medium, 2 Low. Най-сериозните проблеми са в самите калкулатори — 6 от 12 калкулатора са дефектни: при 3 (CPC/CPM/CTR) резултатът се изчислява правилно, но остава невидим за потребителя (CSS .hidden{display:none!important} побеждава inline стила); при други 3 (CPA/CPL/AOV) калкулаторът е напълно нефункционален (липсва JS логика). ROAS работи, но добавката "profit margin" е счупена. Блогът (50 поста) е здрав като съдържание, но нито един пост няма FAQPage schema (пропуснати rich results). Достъпността има 49 axe нарушения (10 critical). Gate статусът: 6/7 gates PASS; E2E FAIL (1 тест, но невъзпроизводим — asset-ът връща 200 live и локално → flaky/serve race, не реален дефект).

Executive Summary (English)

Full-site QA audit found 12 real defects: 6 Critical, 1 High, 3 Medium, 2 Low. The most severe are in the calculators themselves — 6 of 12 calculators are defective: 3 (CPC/CPM/CTR) compute the correct result but render it invisible to the user (.hidden{display:none!important} overrides the inline reveal); 3 (CPA/CPL/AOV) are completely non-functional (no JS handler wired up). ROAS works, but its "profit margin" add-on is broken. The blog (50 posts) is content-healthy but 0/50 posts have FAQPage structured schema. Accessibility has 49 axe violations (10 critical). Gate status: 6/7 gates PASS; E2E FAIL (1 test, but not reproducible — the asset returns HTTP 200 live and locally, so it is a flaky/serve-readiness issue, not a real defect).

Gate Status Table (real numbers)

Gate Command Result Detail
build npm run build ✅ PASS 89s, dist/ produced, no errors
lint eslint "js/**/*.js" "./*.js" ✅ PASS 36s, 0 errors
test jest ✅ PASS 79/79 passed (3 suites)
typecheck tsc --noEmit ✅ PASS 9s, 0 errors
schema node scripts/validate-schemas.js ✅ PASS 0 JSON-LD errors
links node scripts/check-links.js ✅ PASS 0 broken internal links
e2e npx playwright test ❌ FAIL 9 passed, 1 failed (see Issue #9)
OVERALL 6/7 PASS E2E fails (flaky, non-reproducible)

Issues by Severity

Severity Count
Critical 6
High 1
Medium 3
Low 2
Total 12

Issues by Category

Category Count
Functional 7
Visual 3
Accessibility 1
Content/SEO 1
Console 0

Testing Scope


Per-Issue Findings

🔴 CRITICAL #1 — CPC calculator computes correctly but the result is invisible

🔴 CRITICAL #2 — CPM calculator result invisible (same root cause as #1)

🔴 CRITICAL #3 — CTR calculator result invisible (same root cause as #1)

🔴 CRITICAL #4 — CPA calculator completely non-functional

🔴 CRITICAL #5 — CPL calculator completely non-functional

🔴 CRITICAL #6 — AOV calculator completely non-functional

Shared root cause for #1–#6: (a) .hidden { display:none !important } defeats any reveal that only sets element.style.display without also calling classList.remove("hidden"); (b) simple-main.js is missing cpa/cpl/aov calculator branches. Fix: add classList.remove("hidden") (and add it back on reset) wherever results are revealed, and add the three missing three-variable branches to simple-main.js.

🟠 HIGH #7 — ROAS "Enable Profit Margin" add-on is unusable

🟡 MEDIUM #8 — No FAQPage structured data on any blog post (50/50)

🟡 MEDIUM #9 — E2E gate FAILED (flaky, non-reproducible)

🟡 MEDIUM #10 — E2E coverage gap (10 calculators untested)

🟢 LOW #11 — CPA/CPL/AOV absent from "Related Calculators"

🟢 LOW #12 — No console errors site-wide (positive finding)


Summary Table of All Issues

# Severity Category Title URL Status
1 Critical Functional/Visual CPC result computed but invisible /cpc-calculator/ Open
2 Critical Functional/Visual CPM result computed but invisible /cpm-calculator/ Open
3 Critical Functional/Visual CTR result computed but invisible /ctr-calculator/ Open
4 Critical Functional CPA calculator non-functional /cpa-calculator/ Open
5 Critical Functional CPL calculator non-functional /cpl-calculator/ Open
6 Critical Functional AOV calculator non-functional /aov-calculator/ Open
7 High Functional ROAS profit-margin add-on unusable /roas-calculator/ Open
8 Medium Content/SEO No FAQPage schema on 50/50 posts /blog/* Open
9 Medium Test infra E2E gate FAIL (flaky, non-reproducible) e2e suite Open (re-run)
10 Medium Testing gap 10 calculators have no E2E coverage e2e suite Open
11 Low Content CPA/CPL/AOV missing from related links all calc pages Open
12 Low Console No console errors site-wide (positive) all pages OK

Testing Notes

What was tested (with real evidence):

What was NOT tested / limitations:

Blockers: None. The only environmental caveat is the E2E flaky failure (#9), which is test-harness timing, not a site defect.

Evidence artifacts: C:\Users\Nikola\qa-audit-temp\qa-results.json (full machine-readable results) and C:\Users\Nikola\qa-audit-temp\shots\*.png (desktop + mobile screenshots per page).