Skip to content
sergimaxPublic

About

Web app to track raid cooldowns per character and dungeon, with BiS gear hints and raid signup helpers (WotLK-focused).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

English | Русский

Web app to track raid cooldowns per character and dungeon, with BiS gear hints and raid signup helpers (WotLK-focused). Data persists locally in localStorage. Live site: sergimax.ru/raidwise

App version Game version

Features

Toolbar panels are mutually exclusive (only one open at a time). Breadcrumbs at the top of each page show the current section or raid tool and link back to My Raids.

Characters & dungeons

Add characters and raids manually (toolbar buttons or the dotted empty column/row on the table), or load the WotLK template when the list is empty; edit specs, WowSims gear, also-owned items, raid metadata, and column order later. Header info opens a short intro (CDs, gear planning, or BiS-only).

Cooldown toggles

Mark which character has CD on which raid. Reset one character from the table header, or everyone from Raid settings.

Table

Sort and search raids (EN/RU, e.g. ICC25H / ЦЛК25хм); Type shows size (+ skull for Heroic), with per-row edit/delete. When sorted by name, adjacent variants of the same template raid share a background image across up to four rows; extra variants start another image. Character columns use class-colored names and main/off GS; Complete is a progress bar; compact on small screens, with horizontal scroll inside the table when many characters are present.

Raid settings

Bulk reset CDs, or delete all characters / dungeons / local BiS lists (with confirm); when empty, Add raids from template.

Settings

The About section shows the app version and labeled links to the source code and author's website. What's new shows all changes for the latest published version, with a link to the full changelog.

Character pick for a raid

Copyable signup lines of characters still missing CD on filtered raids, with min GS / role / spec filters, optional With upgrades, and optional Specs / GS in the line format. Session-kept filters; Reset parameters clears them; click Selected raid chips to exclude false matches.

Soft pick for a raid

Plan soft reserves for one character + spec on BiS upgrades from filtered raids (re-roll or +100, configurable soft reserve maximum with no fixed upper bound), with competition colors, win-odds hints, and a pasteable call list. For re-rolls, ordinary rolls count only when one player calls softs on an item; with multiple callers, only soft rolls count. The call list contains only your selected soft reserves. A toggle controls whether to show the number assigned to each item. The All useful items toggle (off by default) appends the remaining items from the useful-item list after your selected reserves. Optional With upgrades dims characters with no BiS targets; Reset parameters clears the panel filters. Uses the active BiS builds list; other-spec gear counts as owned; session state survives closing the panel.

BiS builds

Built-in presets per spec (Kingdom first, then Titans/community); local copies are editable for gear-choice hints. Paper-doll slot layout with alternatives; Copy exports Slot: Item lines.

Gear hints

CD cells tint amber for missing BiS and blue for stat-filtered ilvl upgrades (hidden when that CD is marked; main/off split when both specs are set). Boss-grouped tooltips include tier tokens; also-owned items count without being on the WowSims export.

EN / RU

Full UI and item tooltips; first visit defaults to Russian.

Theme

Light/dark mode saved locally, with a system preference fallback when browser storage is unavailable; quiet MUJI chrome with a subtle page/panel dot grid; design tokens in docs/design/design-system.md.

Development

Lighthouse Performance Lighthouse Accessibility Lighthouse Best Practices Lighthouse SEO

Stack: React 19, TypeScript, Vite, MUI, Vitest + Testing Library.

CI: Locally, npm run ci runs lint + tests with coverage + build; npm run test:browser runs the browser smoke checks separately. On push/PR to main, GitHub Actions runs Lint, Test and coverage, Build, and Browser smoke in parallel, then Release files (checks CHANGELOG / README badges / lockfile when package.json was bumped; skips this check when the version is unchanged) (.github/workflows/ci.yml); pushes to main also upload a dist artifact (.github/workflows/build-artifacts.yml).

Layout: src/components/ (UI), src/hooks/ (domain + overlay panels), src/utils/, src/data/ (WoW bundles + BiS presets), src/storage/. Tests are colocated as *.test.ts(x).

Performance: WoW item JSON is code-split and loaded after the app shell (WowDataProvider / ensure-wow-data); fonts are self-hosted under public/fonts/; class/spec icons are 32×32 WebP; item tooltip scripts load on first item-link interaction for the active locale only.

Contributor and agent conventions: AGENTS.md.

Planned features: docs/roadmap.md.

Quick start

npm install
npm run dev

Open http://localhost:5173.

Command Description
npm run dev Dev server
npm run build Production build
npm run preview Preview production build
npm run lint ESLint
npm run test / npm run test:run Vitest (watch / single run)
npm run test:coverage Run Vitest with source coverage; see coverage/index.html for uncovered lines and branches
npm run test:coverage:changed Run all Vitest tests and report coverage for locally changed source files; use npm run test:coverage -- --coverage.changed=<base> to compare with a commit or branch
npm run test:browser Build and check theme first paint, appearance, accessibility, and raid data persistence in Chrome (set CHROME_PATH if Chrome is not in a standard location)
npm run ci Lint + test:coverage + build (pre-push checks)
npm run build:wow-data Regenerate bundled WoW JSON from scripts/wow-data/wowsims-db.json (includes VoA tier loot derived from tier set metadata when WowSims omits zone 4603)
npm run generate:bis-presets Regenerate built-in BiS presets from scripts/bis/bis-list-sources.md + scripts/bis/bis-list-mix.md
npm run comment:bis-presets Add slot comments to BiS preset files
npm run download:gear-slot-icons Regenerate WoW paper-doll slot placeholder PNGs in src/assets/gear-slot-icons/
npm run download:raid-icons Regenerate template-raid achievement icons in src/assets/raid-icons/
npm run download:fonts Regenerate self-hosted Onest / Noto Sans / JetBrains Mono woff2 + src/fonts.css
npm run compress:class-icons Resize class/spec icons to 32×32 WebP in src/assets/class-icons/
npm run lighthouse Desktop Lighthouse vs preview/production URL → docs/lighthouse/ (run preview first for local)
npm run lighthouse:mobile Same with the mobile preset

The CI test job uploads the coverage-report artifact. Coverage includes all runtime TypeScript files under src/, including files not imported by tests; it excludes tests and test helpers. There is no minimum coverage threshold yet. Browser smoke checks run separately.

Built-in BiS lists are authored in scripts/bis/bis-list-sources.md (Titans + community) and scripts/bis/bis-list-mix.md (Kingdom. With variants: numbered weapons + N-M slot alternatives). Regenerate TypeScript presets after editing the markdown.

Persistence

Key Contents
raidwise Characters, dungeons, toggles (schemaVersion 6)
raidwise-bis-lists BiS preset selections and local lists (schemaVersion 1; malformed entries skipped on load)
raidwise-item-tooltip-locale en or ru (defaults to ru)
raidwise-color-mode Light/dark preference
raidwise-gear-hint-legend-dismissed Dismissed gear-hint legend above the table

Legacy my-raid-cds* keys are copied to the new names on first load, then removed.

Character names: new names are letters only (Unicode \p{L}+); display capitalizes the first letter. Legacy names with digits/symbols still load.

Corrupted tracker data resets with an error alert. Legacy saves migrate on load.

Deployment (caching & HTTP)

Vite emits content-hashed files under assets/ (e.g. /raidwise/assets/index-….js). For good Lighthouse cache scores on sergimax.ru/raidwise:

Path Cache-Control Notes
/raidwise/assets/* public, max-age=31536000, immutable Filenames change every build
/raidwise/index.html no-cache or short max-age (e.g. 60) Must revalidate so clients pick up new hashes
/raidwise/fonts/* public, max-age=31536000, immutable Self-hosted woff2

Also enable HTTP/2 (or HTTP/3) and brotli or gzip for JS/CSS/JSON/SVG/woff2. Client-side routes under /raidwise/ must fall back to index.html so direct links and refreshes work.

Example Nginx locations inside a server block. root maps /raidwise/... to files under /usr/share/nginx/raidwise/...; unknown client-side routes fall back to index.html, while missing files under assets and fonts stay 404.

location = /raidwise {
  return 301 /raidwise/;
}

location = /raidwise/index.html {
  root /usr/share/nginx;
  add_header Cache-Control "no-cache";
}

location ^~ /raidwise/assets/ {
  root /usr/share/nginx;
  try_files $uri =404;
  add_header Cache-Control "public, max-age=31536000, immutable";
}

location ^~ /raidwise/fonts/ {
  root /usr/share/nginx;
  try_files $uri =404;
  add_header Cache-Control "public, max-age=31536000, immutable";
}

location ^~ /raidwise/ {
  root /usr/share/nginx;
  try_files $uri $uri/ /raidwise/index.html;
}

About

Web app to track raid cooldowns per character and dungeon, with BiS gear hints and raid signup helpers (WotLK-focused).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages