For geeks

How WCL Analyzer works

Short version

WCL Analyzer turns WarcraftLogs reports into permanent PBS and CLA report pages. The site itself is static and runs on Cloudflare Pages. Supabase holds accounts, guilds, reports and a job queue. Runner workers pull jobs from that queue, talk to the WarcraftLogs API and write the finished report back. No part of the pipeline trusts the browser with anything secret.

1 · Import

A guild member pastes a link

Anyone in a guild can paste a WarcraftLogs URL on the dashboard, pick PBS, CLA or both, and choose which CLA modules to run. The job lands in the queue with status queued — that is all the web app does.

2 · Queue

A worker claims the job

Runner workers poll the queue and claim jobs atomically, so two workers never grab the same report. The winner fetches every fight from the WarcraftLogs API, runs the analyzers and grades each player.

3 · Publish

The report goes live

The finished report is saved to Supabase and published on a permanent page. Anyone with the link can open it — no login, no API key, no spreadsheet access.

Architecture

The moving parts

Dashboard Supabase queue Runner workers WarcraftLogs API Supabase Public page

Cloudflare Pages serves the UI and a set of small API functions: auth, guild management and report CRUD. Supabase is the single source of truth — users, guilds, invites, report JSON, the job queue and a shared WarcraftLogs response cache all live there. The workers are plain Node processes; they can run on any machine that has the right environment variables, and you can run one or ten. There is no webhook dependency: a worker that can reach Supabase is a worker that works.

Workers

Pull, don't push

Workers pull jobs instead of waiting to be called. Each worker claims a queued report with a compare-and-set update, sends a heartbeat every poll cycle so site admins can see who is online, and releases the job back to the queue if WarcraftLogs rate-limits it — with an automatic retry counter instead of a failed report.

Cache

Respecting the point budget

WarcraftLogs gives every API key a point budget, so raw API responses are cached in Supabase per report. If a job is interrupted or rate-limited halfway, the next attempt — on any worker — continues from the cached responses instead of re-spending points from zero. The cache is cleared once the report publishes.

PBS

Role Performance Breakdown

PBS grades how the raid played, broken down by role. It opens on a General table for the whole raid, then splits into one table per role (tanks, healers, melee, ranged) plus a matching "casts" table for each role's cooldown and ability usage.

  • Boss Fights — every pull, with duration and outcome.
  • Damage Done / Damage Taken — overall throughput and incoming damage per player.
  • RPB Damage Taken — avoidable boss mechanics each player ate, counted per fight.
  • Debuffs / RPB Debuffs — uptime on key raid debuffs (Sunder Armor, Faerie Fire, etc.) per player.
  • Deaths — who died, when, and to what.
  • Interrupts — who interrupted what, and which casts went through unchecked.
  • RPB Engineering — engineering gadget usage (bombs, nets and similar).
  • RPB Other Casts — trinkets, racials and other configured cooldowns.

CLA

Combat Log Analytics

CLA is the spreadsheet-style audit: it checks what the raid brought, not how it played.

  • Fights — the fight list with start/end times used by every other CLA tab.
  • Validate — sanity checks that the report parsed cleanly before trusting the rest.
  • Gear listing — every player's equipped items, gems and enchants.
  • Gear issues — missing gems, missing or low-rank enchants, empty sockets.
  • Drums — Drums of Battle/War uptime across the raid.
  • Buff consumables — flask, elixir, food and scroll uptime per player.
  • Shadow resi — Shadow Resistance gear checks for fights that need it.

Data catalog

Gems, enchants and item details

Gear data straight from WarcraftLogs is rough around the edges: gem names go missing, icons point at the wrong thing, enchant labels come back oddly scaled. Local catalogs fill in the gaps so the gear tabs can name every gem and enchant correctly.

Safety

Your WarcraftLogs key, handled carefully

Your personal WarcraftLogs API key is encrypted (AES-GCM) before it is stored, and is only ever decrypted server-side by the worker that runs your reports. It is never shown to other users and never included in any published report.

Spreadsheet DNA

Born in Google Sheets

WCL Analyzer is a port of two community Google Sheets that raid leads have used for years. The web version keeps their logic — the same checks, the same thresholds — but swaps copy-pasted sheets for permanent pages, cached API calls and a job queue. The originals are still maintained and worth a look:

Ready to try it

Find your guild's reports

Search for your guild on the homepage to browse its published reports, or create an account and import your own.