Changelog
Ce qui sort, ce qui change, ce qui est corrigé. Du plus récent au plus ancien.
v0.22.0
— Every featured pro now has at least a dozen replays- ContenuEvery pro on the homepage now has a meaningful catalogue of replays to browse — Astrea, Dark, MaxPax, Bunny, Rogue and the rest moved from a handful (or zero) up to 12+ each, with most rosters now at 25+. Pro replays in the database roughly tripled in this round.
v0.21.9
— Pro tiles show replay counts- AjoutéEach pro tile on the homepage now shows how many of their replays we have, so you can see at a glance which players have the deepest catalogue before clicking in.
v0.21.8
— Profile replay cards now match the homepage- ModifiéReplay cards on profile pages now show the player name with the same casing as the page heading and URL — no more mismatch between 'HeRoMaRinE' in the title and 'HeroMarine' inside individual cards. The profile owner's name is also bolded regardless of casing.
- AjoutéProfile replay cards now show the AI coach and AI cast badges, matching the homepage.
v0.21.7
— Profile pages now match names case-insensitively- CorrigéProfile pages used to 404 when the URL casing didn't exactly match what's inside the replay files. Liquipedia spells one player 'HeRoMaRinE' but his in-game name is 'HeroMarine', and the same player can appear as 'Serral' or 'serral' depending on who uploaded — the previous exact-match lookup missed everything when the URL casing was off by even one letter. /profiles/<region>/<name> now matches case-insensitively, so any spelling resolves to the same player.
v0.21.6
— HeroMarine profile now loads- CorrigéClicking the HeroMarine card on the homepage led to a profile page that returned no replays despite us having 31 of his games. The card linked using the Liquipedia spelling 'HeRoMaRinE' but the name inside replay files (and our DB) is 'HeroMarine' — exact-match lookup missed everything. Roster now uses the canonical in-game spelling.
v0.21.5
— Pro profiles now show games from every region- CorrigéClicking herO from the homepage went to a profile page that showed no games — the profile route filtered by SERVER region (where games were played) but the homepage card linked using the pro's nationality region (KR), and herO actually plays mostly on the CN server. Two fixes: profile pages now show every replay where the player's name appears regardless of which server it was played on, AND homepage pro cards link to the region where the pro has the most games in our DB.
v0.21.4
— Pro card images now load on mobile- CorrigéOn mobile the pro player cards on the homepage rendered as super-thin slivers with no photo visible — the cards relied on a desktop-only grid stretch to get their height, so on mobile they collapsed. Each card now has an explicit square aspect ratio on mobile (auto on desktop), which gives the photos a real frame to fill.
v0.21.3
— Top 15 active 2026 pros on the homepage- ModifiéThe pro player grid is now the curated top 15 S-tier 2026 active pros, in skill-rank order: Serral, Clem, MaxPax, herO, Maru, Reynor, Cure, Solar, ByuN, HeRoMaRinE, Astrea, Dark, ShoWTimE, Rogue, Bunny. Photo-dominant cards in a 5×3 grid that fills the same vertical space as the replay-of-the-week, so the portraits read large. Pros without a Liquipedia portrait fall back to a race-themed coloured tile with their initials.
v0.21.2
— Pro player headshots on the homepage- AjoutéPro player cards on the homepage now show actual headshots instead of initials. 24 portraits installed: Serral, Reynor, Maru, Clem, herO, ByuN, Cure, Solar, Dark, Rogue, Trap, Stats, Zest, GuMiho, ShoWTimE, Lambo, SpeCial, Ryung, TY, PartinG, HeRoMaRinE, Neeb, Scarlett, Astrea.
v0.21.1
— Homepage layout — Featured prominent above the fold- ModifiéReworked the homepage so Featured (replay of the week + pros grid) is the first thing you see after the hero, with the upload dropzone tightened up beneath it. The replay-of-the-week card now shows the map's minimap, in cyan instead of amber so it's not confused with AI Coach branding. The pro player grid uses three columns on desktop with full names and 9 cards visible.
v0.21.0
— Featured pros + replay of the week on the homepage- AjoutéHomepage now features a 'Replay of the week' card and a grid of pro player profile cards (Serral, Reynor, Maru, Clem, herO, ByuN and 15+ others) below the upload dropzone. Click a pro to see all their replays in our index; click the featured replay to study the analyzed game. The pros list and featured replay refresh automatically — pros with at least one replay in our DB show up, and the featured replay is the most-viewed game from recent weeks.
v0.20.4
— Thumbs-up/down feedback on per-battle AI coach insights- AjoutéEach battle's AI coach insights box (in the Battles tab of the replay viewer) now has a 👍 / 👎 control next to the AI Coach header. Same flow as the existing per-strength / per-mistake feedback — votes persist on the replay, ping the team, and the highlighted state survives a page reload.
v0.20.3
— Lifted Command Centers no longer vanish from the replay viewer- CorrigéWhen a Terran lifted their Command Center or Orbital Command and the Bldg toggle was off, the building vanished for the entire flight and reappeared on landing. The flying variants of town halls now stay visible regardless of the building toggle, matching the behaviour of grounded CCs/OCs.
v0.20.2
— MULEs render as real unit sprites (with proper MULE icon)- AjoutéReplay viewer now shows MULEs as real unit sprites at the mineral line — same visual treatment as SCVs, with the actual in-game MULE portrait. They appear when calldown'd and disappear when their lifetime ends (or when killed by harass — early MULE deaths now render correctly).
v0.20.1
— MULE drops + per-player exit time + scan/MULE in player colors- AjoutéReplay viewer's FX overlay now shows MULE calldowns: a small filled dot in the casting player's colour appears at the drop location and stays for the MULE's full 64-second lifetime. Pairs nicely with scans (also now player-coloured) so Terran-mirror matchups make sense at a glance.
- ModifiéComsat scan rings now render in the casting player's colour instead of a generic yellow — easier to tell at a glance which team scanned where in 2v2+/team games.
- AjoutéReplays now record when each player left the game, so a future surrender-vs-elimination indicator can tell apart 'they tapped out at 12:30 with their main alive' from 'their last base died first'. Surfacing this in the UI is a follow-up.
v0.20.0
— Replay viewer now shows scans, storms, force fields, and EMPs- AjoutéNew 'FX' toggle in the full-screen replay viewer renders ability casts as overlays on the map: yellow expanding rings for Terran scans (8.93s), purple AOE pulses for Protoss Psi Storms (4s), cyan rings for Sentry Force Fields (11s), and white shockwaves for Ghost EMPs (1.5s). Each effect renders for its actual in-game duration — scrub backwards and the cast replays from the right age.
- ModifiéReplay parser now extracts these four ability events from every uploaded replay. Older replays parsed before this release won't have the data until they're re-uploaded or re-parsed; freshly-uploaded replays show FX immediately.
v0.19.2
— Coach feedback unbroken on production + Contact us moved to footer- CorrigéAI coach 👍 / 👎 votes and freetext comments were silently failing in production with a 400 error — votes were getting black-holed for everyone since v0.19.0 shipped. Fixed: submissions now go through end-to-end and the team email actually fires reliably (was previously losing some sends to a serverless cleanup race).
- ModifiéMoved the yellow 'Feedback' button out of the top navbar into a 'Contact us' link in the site column of the footer. Frees up navbar space on mobile and groups the contact link with the rest of the site links.
v0.19.1
— More visible coach feedback + Strategy/Overall votes + freetext box- ModifiéMade the 👍 / 👎 feedback buttons in the AI coach more visible — they now sit in subtle bordered chips with brighter default opacity, so it's obvious you can click them. Added the same vote control to the Overall Assessment and Strategy sections (previously only Strengths / Mistakes / Key Moments / Priorities had them).
- AjoutéFree-text feedback box at the bottom of the AI coach panel: tell us what landed, what didn't, what you wish it said. Up to 3500 characters, sends straight to the team.
v0.19.0
— 👍 / 👎 feedback on every AI coach item- AjoutéTiny thumbs-up / thumbs-down buttons now sit next to every Strength, Mistake, Key Moment, and Improvement Priority in the AI coach panel — for both the in-replay-viewer compact panel and the full-screen Coach tab. One click records the vote against the replay and pings the team so we hear about coaching that landed (or didn't) without you having to file feedback separately. Your votes persist across page loads via localStorage, so the highlighted button stays after a refresh.
v0.18.7
— Cannon rushes now reported as one event per location- CorrigéMulti-cannon rushes used to surface as one tactic per cannon — a 6-cannon rush at one enemy base showed up as 6 overlapping events spamming the AI coach. Forward Forges and Photon Cannons that land near each other (within 15 units) and within 30 seconds of one another are now grouped into a single tactic spanning the full attack window, with the unit count in the label (e.g. '6 Cannons at enemy base from 1:51 to 2:10').
v0.18.6
— Removed noisy 'building canceled' tactic from coach context- CorrigéStopped tagging every short-lived structure as a 'building ended early' event. The only meaningful version of this play — Zerg's double-extractor trick — already has its own dedicated detector with the right context. Buildings killed mid-construction during harass are already explained by the harass detectors. The leftover catch-all was firing ~1.7 times per replay on routine misclicks and resource pivots, adding noise the coach didn't need.
v0.18.5
— Tightened harass detection — fewer false positives on mid-game engagements- CorrigéMineral-line attack detection no longer fires on standing-army units (Vikings, Marines, Stalkers, Hydralisks, etc.) that walk through or attack a base in the mid-late game — those are normal army engagements, not harass plays. The catch-all from yesterday's release was over-tagging legitimate fights as harass.
- AjoutéThree new specific harass detectors filling canonical gaps: Hellion run-by harass (T), Adept Shade harass (P), and Lurker burrow harass (Z). Each fires only when the harass unit actually reaches the mineral line AND kills workers, matching the existing 8 unit-specific harass detectors (Reaper / Banshee / Liberator / Widow Mine / Oracle / DT / Mutalisk / Zergling).
v0.18.4
— AI coach also tags the attacker on mineral-line raids- AjoutéMineral-line attacks now show up as their own event in the AI coach's input, separate from the defender's worker pull. The attacker's coach can say 'you killed N workers raiding their mineral line at X:XX' instead of just describing it as the defender's perspective. Works for any race (any worker-killing unit — Marines, Vikings, Adepts, Lurkers, Roaches, etc.) and pairs automatically with the defending player's tag so neither perspective is lost. Worker-loss confirmation prevents fly-by misclassification — only fires when the opponent actually killed a worker.
v0.18.3
— Smarter AI coach: scouting, build match, benchmarks, power spikes, race-agnostic worker pulls- AjoutéThe AI coach now sees four new pieces of context for every replay: when each player first got vision of an opponent's base (so the coach can stop blaming you for not reacting to something you couldn't have known about), which pro build your opening most closely matches, which timing benchmarks for that build you hit on time vs missed, and when either team had a sustained ≥30% army-value advantage. Battle reports also now include each side's army composition at the start of the fight plus a derived trade-winner, so the coach can evaluate a 25-supply army vs 18-supply trade instead of just per-team totals.
- CorrigéWorker pulls now correctly distinguish 'fled an attack' from 'real combat pull' across all races. Previous version only caught pulls that overlapped one of our specific harass detectors (Reaper / Banshee / Liberator / Widow Mine / Oracle / DT / Mutalisk / Zergling). It now also catches any race's anti-worker units near a townhall when the puller actually lost workers — Vikings landing on a CC, Marines pressuring the mineral line, Adepts shading in, Lurkers burrowed in the line, and so on. Stops the coach saying 'Never pull workers in TvT' (or any matchup) when the player was just defending an attack the previous detector set didn't recognize.
v0.18.2
— Friendlier 'database unavailable' message- AjoutéWhen the database is temporarily unavailable, the home page and replays list now show a clear amber banner with a Try Again button — instead of an empty list that looks like the site itself is broken. Localized in English, 한국어, 中文, and Français.
v0.18.1
— Landing page: version badge + tighter desktop dropzone- AjoutéMajor.minor version (e.g. 'V0.18') now renders directly under the hero title on the home page in the same gradient/uppercase/heading style as the title itself, and links to /changelog. Patch numbers are stripped so the badge only changes when meaningful releases ship — gives users a visible signal that the site is actively maintained without churning every UI tweak. Source is the top entry of src/lib/changelog.ts so it stays in sync automatically
- ModifiéReduced the desktop replay dropzone height by switching its padding from sm:p-12 (48 px all around) to sm:py-6 sm:px-12 (24 px vertical, 48 px horizontal). Mobile padding (p-6) unchanged. Net: dropzone shrinks from ~240 px → ~180 px tall on desktop, which keeps the 'Drop a replay file here' CTA above the fold alongside the new version badge
v0.18.0
— AI coach: 5 new strategy-shape detectors- AjoutéFive new tactic detectors so the AI coach can frame feedback in terms of the player's overall game posture instead of misreading common openings as mistakes. fast_expand fires when the second resource hall completes at or before the per-race supply benchmark (Terran ≤ 17, Protoss ≤ 19, Zerg ≤ 16) — concretizes 'expanded too late' / 'good macro economy' feedback with hard timing. all_in fires on a composite signal: worker production stops for 60+ s, mineral bank near zero, army held at ≥ 75 % of peak, AND opponent loses 5+ units in the window — coach now evaluates the all-in's success/failure instead of treating it as 'didn't macro.' power_droning fires on Zerg openings where ≥ 85 % of the first 4 minutes' production was Drones with at most 4 army units — fixes false-positive 'you didn't build any units' feedback for correct economic-first openers. worker_rush detects opening-2-minute mining collapses where workers committed to attack and opponent workers actually died — rare but unmistakable cheese. turtle fires on long games (≥ 18 min) where the player held 6+ static defenses with army value below 4000 through the first 15 min — frames feedback as 'evaluate the late-game tech transition,' not 'should have attacked sooner.' Live-corpus dry-run on 200 replays hit zero crashes; fire rates land at FE 66 % / all-in 31 % / power-droning 25 % / turtle 30 % / worker-rush 1.5 %, conservative enough to add real signal without flooding the coach prompt. tactics_version bumps 5 → 6; cached rows self-heal on next read. Six new unit tests covering each detector's positive and negative path. 12 tactic types in total now (15 incl. worker_pull's three sub-classes), all mapped to canonical Liquipedia strategy names
v0.17.5
— AI coach: distinguish defensive worker pulls from combat pulls- CorrigéThe tactics detector now classifies worker_pull events with cross-detector context instead of emitting a single generic tag. After all detectors run, a post-pass refines each worker_pull into worker_pull_defensive (an enemy harass tactic — Reaper, Banshee, Liberator, Widow Mine, Oracle, DT, Mutalisk, or zergling runby — overlaps the pull window AND targets the puller), worker_pull_relocation (a resource hall the puller owns finished within ~60 s before the pull), or stays as worker_pull when neither applies (the original combat-pull semantic). Labels and evidence strings reflect the classification, so the AI coach sees the actual context. Fixes the case where a TvT replay was being told 'never pull workers in TvT' for what were actually workers fleeing a Liberator siege and transferring to a third base. Harass detectors now also emit targetPlayerId so the post-pass can disambiguate teammates in 2v2+. tactics_version bumps 4 → 5; cached rows self-heal on next read. New unit-test file (6 tests) covers each branch — combat baseline, relocation hit, opponent's base ignored, far-away base ignored, defensive harass match, 2v2 wrong-target safety
v0.17.4
— Pixi viewer: full unit-icon coverage for Co-op + custom mods- CorrigéAudited the live corpus (1,432 replays, 1,066 distinct unit names) and went from 61 missing icons → 0. Replays on Co-op missions and custom mods now render all units in the Pixi fullscreen viewer instead of falling back to placeholder squares for unfamiliar names. Coverage breakdown: aliased Stetmann commander variants (ZerglingStetmann, LarvaStetmann, HatcheryStetmann, SuperGaryStetmann, …) to their base zerg equivalents; HotS Co-op Swarmling/Splitterling variants → Zergling/Baneling; Stukov infested-Terran units (StukovInfestedDiamondBack, StukovInfestedSiegeTankUprooted, StukovInfestedBanshee, SILiberator, InfestedTerran, …) → base Terran units; Tychus outlaws (TychusWarhound, TychusHERC, TychusOdin, TychusWarhoundAutoTurret) → Marauder/Marine/Thor/Raven; Mengsk VikingMengskFighter → Viking; Zagara BileLauncherZagara → Roach; Brutalisk mutator eggs → Drone/Ultralisk; TaurenSpaceMarine joke unit → Marine. Also expanded the hidden-from-Pixi list with: decorative props (DestructibleStreetlight/BullhornLights/Searchlight/TrafficSignal, Hut, GarysDen, UtilityBot, DumpTruck), effect/cloud/cocoon units that emit position events but aren't gameplay units (SNARE_PLACEHOLDER, SICocoonInfested* family, SILiberatorCloud, NovaAcidPuddle, TychusOdinPrecursor, Liberator_BlackOpsSpawnerUnit), Stetmann-themed casters, and the long tail of low-frequency arcade-mod props (AdunGenerator, CruiserBike, TerranBuggy, SoACaster, plus the Iron Gang Chinese arcade mod). Net result: every unit in every parsed replay now resolves to either a real icon or an explicit hide
v0.17.3
— Map: WOL Protoss Edition 3 (Zero Hour) custom-mod minimap- ContenuAdded the minimap for 'Wings of Liberty Protoss Edition 3: Zero Hour' — a fan-made Protoss reskin of the WoL campaign mission, listed on SC2 Arcade as a multi-mission campaign mod. Image extracted directly from the replay's map archive (no Liquipedia / wiki page exists for arcade mods). Also added a colon-safe alias mapping the original name (which contains a ':') to a filesystem-safe canonical so the on-disk filename works on every platform and is URL-clean: 'Wings of Liberty Protoss Edition 3: Zero Hour' → 'Wings of Liberty Protoss Edition 3 Zero Hour'. Replays on this mod now render their actual minimap instead of the placeholder
v0.17.2
— Map coverage sweep: aliases, GSL prefix, Disco Bloodbath- ContenuAudited every distinct replays.map value in the database against the resolver — 195 distinct names, 23 unresolved. Knocked it down to 15 (98.7% of the replay corpus now hits a real image instead of the fallback) by adding cross-locale aliases for Chinese ladder map names whose English images already exist on disk: 永恒帝国 → Eternal Empire LE, 特里同 → Triton LE, 雷鸟 → Thunderbird LE, 伊菲莫隆 → Ephemeron LE, 大气2000 → 2000 Atmospheres LE, 亡者之夜 → Dead of Night, 浴血迪斯科 → Disco Bloodbath LE. Also downloaded Disco Bloodbath LE itself (full + thumb webp) from Liquipedia. The remaining 15 are all 1–3 replay long-tail maps (one-off SC1 customs and obscure CN ladder names with no obvious English equivalent) — adding aliases for those without high confidence is more risk than reward, so they stay on the placeholder until a stronger signal shows up
- CorrigéResolver now strips the 'GSL_' tournament prefix before alias lookup (matching the existing AVEX strip rule). 'GSL_Antiga Shipyard' resolves to the existing Antiga_Shipyard.webp instead of the fallback, and any future GSL_-prefixed names auto-resolve
v0.17.1
— Map coverage: Berlingrad LE, Invader 1.0, + locale aliases- ContenuAdded two missing map images and two cross-locale aliases that the resolver was previously falling through to the placeholder for. Berlingrad LE (LotV ladder, sourced from Liquipedia) — full-res for the replay viewer plus thumb for the cards. Invader 1.0 (SC1/Brood War custom by Earthattack, used in ASL S16) — also full + thumb. Aliased '营救矿工' (Chinese co-op map name) → existing Miner_Evacuation.webp, and 'Champs de mort CE' / 'Champs de mort' (French ladder name) → existing Fields_of_Death_CE.webp. The Invader 1.0 file lives alongside the existing Invader_LE.webp — different maps, same root name; the resolver's space→underscore step keeps the version suffix on disk so they don't collide. Replays on these maps will now render their actual minimap instead of the fallback
v0.17.0
— French locale (Français) — fourth supported language- AjoutéFrench (fr) is now the site's fourth supported locale alongside English, 한국어, and 中文. Every page renders under /fr/* — home, all 19 guides, replays index, replay viewer, build orders, players, profiles, changelog. The whole UI string set (~30 JSON namespaces, including the 19 SEO-targeted guide articles) was machine-translated via Claude Opus 4.7 with a translator-grade system prompt that preserves keys, ICU placeholders, HTML/markdown markup, and the in-game / brand vocabulary the French SC2 community already uses in English (Marine, Stalker, build order, APM, stim, etc.). Triggered by a recent French traffic surge landing on the English site — visitors can now read native, and Google can index the localized URLs. Driven by adding 'fr' to next-intl's locale list, so the site language switcher (v0.16.0), sitemap, and hreflang alternates pick it up automatically. Also expanded the AI Coach + AI Cast language pickers to French — coaching output and cast narration both work in fr, with the SC2 jargon kept in the form French casters/coaches actually use
- CorrigéCentralized hreflang generation. Every guide and metadata page now declares alternates for ALL configured locales via a buildHreflangAlternates helper that loops over routing.locales, instead of each page hardcoding its own languages dict. Audit found ~10 guides that had been declaring only en + ko in their alternates — Chinese versions of those guides were live and indexable but weren't linked as alternates from the en/ko versions, weakening cross-locale SEO. All 4 locales (en/ko/zh/fr) + x-default now appear consistently across every page, so adding a fifth locale in the future is a one-line change in routing.ts
v0.16.0
— Site language switcher in the nav- AjoutéGlobe-icon dropdown between Players and Feedback in the top nav lets visitors switch the entire site between English, 한국어, 中文, and Français in one click. The trigger shows the current locale code (EN / KO / ZH / FR) and a chevron; the menu lists each option with its native-script label. Switching preserves the current path and any query string — e.g. clicking 한국어 from /en/replay/abc?t=120 lands on /ko/replay/abc?t=120, so users on a guide or a deep replay link don't lose their place. Driven by next-intl's locale-aware Link so navigation stays client-side. The switcher also propagated SiteNav onto guide pages, which previously had no top nav at all — guides now match the rest of the site's chrome
- ModifiéOn mobile the Feedback button collapses to its icon-only form (full label keeps showing on sm+ screens), so the new globe icon doesn't crowd Donate at narrow widths
v0.15.3
— Guides link removed from top nav- ModifiéThe Guides link is gone from the top navigation. Guide pages remain reachable via direct URL, search, internal links from other pages, and the footer — only the navbar entry was dropped to streamline the primary nav and free a slot for surfaces users hit more often (Replays, Build Orders, Players)
v0.15.2
— AI cast feature hidden- ModifiéThe AI cast button, language picker, generation banner, and 'Cast' badge on replay cards are hidden site-wide. The replay viewer falls back to the silent visualization play button on every replay (SC2, Brood War, AI Arena, Co-op all behave the same now), and the ?autoplay=cast deep-link is short-circuited so old external links can't silently kick off a new generation. Server-side cached MP3s and the /api/commentary pipeline are untouched — flipping the supportsCast flag back brings the UI in unchanged
v0.15.1
— Mobile replay viewer: footer always above the fold, single play button frees timeline width- CorrigéMobile browsers compute h-screen (100vh) including the URL bar even when it's painted over the bottom of the viewport — so the play button + timeline could clip below the visible fold on phones until you scrolled or collapsed the URL bar. The replay viewer now uses h-dvh (dynamic viewport height) which tracks the actually-visible area, so the controls always sit inside the visible footer regardless of browser chrome state. Trimmed the safe-area floor from 2.5rem down to plain env(safe-area-inset-bottom) + 0.5rem too — the old floor was bigger than the iPhone home indicator (~34px) needs and was eating ~24px of timeline real estate on every phone
- ModifiéMobile timeline shows only the play button that's the active control. When the AI cast is currently the playback mode, only the cast button (Pause / Resume Cast) renders; otherwise only the silent visualization play button. Frees ~40px of timeline scrubber width — meaningful on a 375px-wide phone. Desktop is unchanged (both buttons + language picker stay visible). Cast generation remains a desktop affordance — tapping cast on a phone is rare and the timeline trade is more valuable
v0.15.0
— Army-tab unit toggles, namespace-aware lookups, mid-game morph icons, and flying-building flight paths- CorrigéWhen a player resigned, every one of their surviving units would suddenly vanish from the Pixi replay canvas about 15 seconds later — even though the units were still alive and the replay was still playing. The renderer used to hide any unit whose last sampled position was more than 15s behind the playhead (so we wouldn't freeze a scout in mid-walk forever), but sc2reader stops emitting UnitPositionsEvents once a player leaves, so during the post-resignation cleanup phase EVERY surviving unit on that player's side hit the threshold simultaneously. The renderer now uses the parser's death events as the sole source of truth for visibility — units stay drawn at their last known position until they actually die. The earlier guard was guessing; the parser's diedAt is reliable, so trust it
- AjoutéInside the side-by-side replay viewer, the unit-composition pills on the Overview and Army side-panel tabs are now clickable. Clicking a pill hides that unit type from the Pixi map (and stops it contributing to fog of war); clicking again restores it. In team view a single click toggles every player on that team. Useful for inspecting stacked units that share spawn coordinates — e.g. a Colossus stuck at the Robotics Facility can be obscured by a later-spawned Immortal at the same point — and for isolating a player's army during a busy fight. Hidden state resets on reload
- CorrigéThe Overview-tab side-panel composition pills mixed in random-looking structures alongside army units — the BUILDING_NAMES set the filter relied on was missing the actual unit-name variants sc2reader emits, so e.g. Templar Archives showed up as 'TemplarArchive' (singular) and Lurker Dens as 'LurkerDenMP', sneaking past the building filter. Synced the set with the parser's list and added the lifted-Terran flying variants. The Overview pills now show only units; the Army tab still groups Army + Buildings as before
- CorrigéComposition pill counts could stay frozen at peak even after every one of those units had died — the parser was reading the human-readable name off the death event ('LurkerBurrowed', 'BattleHellion', 'LurkerEgg') instead of the internal type tracked through morphs, so the −1 landed on a name that no birth event ever produced and the canonical-name count never decremented. The death-event resolver now reads the latest internal type from the per-unit registry that already follows morph state and applies the alias table once at the source — every downstream caller (timeline activeUnits, units-lost feeds, units-killed feeds) gets the same canonical name regardless of burrow / egg / cocoon state. Existing replay rows refresh on the next backfill
- CorrigéAudited every LotV multiplayer transformation/morph/mode-change and filled in the parser's alias coverage. Burrow forms for every burrowable Zerg unit (Drone/Zergling/Baneling/Roach/Ravager/Hydralisk/Infestor/Queen/Ultralisk) now collapse to the canonical name; siege/AG/HiP forms (SiegeTank, Liberator, Thor) do too; cocoons for the Overseer/OverlordTransport morph paths join the existing Baneling/Ravager/BroodLord/Lurker cocoon coverage; mode flips (WidowMine burrow, SupplyDepot lower, PylonOvercharge, Observer surveillance, Overseer oversight, Spine/Spore Crawler uproot) all alias to their persistent base. Side-panel composition pills no longer flicker between rooted/uprooted or burrowed/unburrowed counts, and morph-form deaths attribute to the correct canonical name. Rule of thumb: if it has a morph state, the parser now collapses it. The new units.test.ts grep-parses parse.py's alias table at test time so future drift breaks the suite immediately
- CorrigéFilled UNIT_STATS gaps so every canonical LotV ladder name has a hp/range/cost record for the side-panel tooltip — generic addons (TechLab, Reactor) the parser emits before they attach, lifted-Terran flying buildings (CommandCenterFlying / OrbitalCommandFlying / BarracksFlying / FactoryFlying / StarportFlying) with non-attacking variants of their grounded stats, rich-vespene gas geyser variants (RefineryRich / AssimilatorRich / ExtractorRich), and the morph-state legacy aliases for replay rows that haven't been re-parsed yet. The audit found 9 canonical names with no UNIT_STATS entry — every hover on those rendered an empty tooltip
- AjoutéMode-aware unit-icon and unit-stats resolvers (getIconForGame / getStatsForGame). The icon resolver now accepts a 'sc1' | 'ladder' | 'coop' mode and prefers the namespace that matches the replay's mode — guards against the 6 ladder/co-op name collisions (SiegeTank, Mothership, MothershipCore, NydusCanal, SwarmHostMP, TemplarArchive) silently shadowing each other if a future commander tweak diverges any of them. Default mode stays 'ladder' so existing call sites keep working unchanged
- ModifiéWired the GameMode discriminator from the replay page down through every renderer that resolves icons or stats. ReplayStatsPanel pills, the Pixi sprite scaler, the Canvas2D heatmap icon cache, the hover tooltip, and every Overview/Economy/Army/Battle tab now pass mode='ladder' or mode='coop' (derived once via deriveGameMode(replay.game, replay.category)) to the resolvers. Co-op replays now read commander-specific stats out of COOP_UNITS first; ladder replays read out of UNIT_STATS first; SC1 short-circuits to its own table. The unit-scale function reads off the right side of the resolver too
- CorrigéLowered Supply Depots and other morph-state buildings rendered roughly 6× their correct tile area on un-re-parsed replays — the Pixi renderer fell through to its missing-stats fallback (scale 2.5×) because UNIT_STATS only covered the canonical name. Mirrored every entry in api/parse.py UNIT_NAME_ALIASES into UNIT_STATS so morph keys (SupplyDepotLowered, BanelingBurrowed, RoachBurrowed, OverseerCocoon, …) inherit the canonical's footprint and radius — and added a parity test asserting each morph form scales identically to its canonical, so future drift fails the suite
- AjoutéSourced Liquipedia portraits for the most-visible morph-state forms that had been falling back to the canonical icon: Supply Depot (Lowered), Siege Tank (Sieged), Liberator (AG mode), Widow Mine (Burrowed), Warp Prism (Phasing). Lowered depots now render with their distinct flat sprite on the Pixi canvas (typeChanges-driven, kicks in mid-game when the depot toggles); the unit-mode forms get the right portrait in the side-panel composition pills + tooltip, and will pick up canvas swaps when unit-side mode tracking is added
- AjoutéLifted Terran buildings now follow their flight path on the replay canvas instead of being pinned to the construction site. The parser routes UnitPositionsEvent samples to base_tracks too (alongside unit_tracks), and the renderer uses a new resolveBasePosition() helper that walks typeChanges to identify the active Flying segment, keeps interpolation confined to samples inside that segment (so a CC that flies twice never gets a fake straight line connecting the two flights), and falls back to the construction site whenever sc2reader didn't sample the building during a given lift. sc2reader emits position samples sparsely for buildings — most lifts (especially Factory/Starport defensive lifts) won't produce any samples and stay static, but the cases where it matters (CC/OC moving to a new expansion, Barracks proxy plays) now animate correctly
v0.14.17
— Cast deep-links land paused so the first play click reliably starts audio- Corrigé?autoplay=cast deep-links could land on a silent replay because browser autoplay policies require a recent user gesture and the click on the source card doesn't survive SPA navigation. The previous fix tried to detect blocked autoplay and retry on the next gesture, but each browser failed differently — sometimes play() rejected, sometimes it resolved while staying paused, sometimes it paused a tick later — so detection was unreliable and users frequently had to toggle pause→resume to unstick the audio. Now the deep-link lands with cast enabled at 1× but paused, so the user's first click on Play is itself the gesture that unlocks audio and it works on the first try. Same change for clicking 'Play w/ Cast' on a replay that needs generation: after the 1–2 min generation finishes, cast is enabled but paused, since the original click gesture has long expired
v0.14.16
— BW inactivity-based death detection no longer requires a 30s observed span- CorrigéThe inactivity fallback in tag-death inference required observedSpan ≥ 30s (a tag had to be seen for at least 30s before it could die via inactivity). That filter was rejecting briefly-selected units that were then killed quickly — e.g. a Shuttle that got clicked once to unload, then was shot down; or a High Templar that cast one storm and immediately died. Because the 2-pass lifetime tracker already incorporates every Select + every hotkey-recalled action, tag.lastSeen truly is the final mention anywhere in the stream. If lastSeen is followed by 30s of silence before game end, the unit is dead regardless of how long it was observed. Workers + Overlords stay exempt (they routinely idle unseen for minutes)
- ModifiéDownstream effect on user replay: tagged-unit death rates now look realistic (Zealot 46%, Hydralisk 42%, HT 33%, Lurker 43%), and the sibling-propagation step inherits those rates for untagged units. Total deaths in na1st-vs-lock: 8→16 Protoss (18%), 44→52 Zerg (36%)
v0.14.15
— BW deaths propagate from tagged units to untagged siblings- CorrigéBW death attribution was only running on units with a Select-based tag match — about 31% of produced units in a typical macro replay. The other 69% (units that lived and died inside a hotkey group, never individually re-selected) had diedAt=null by default, so the scoreboard showed ~12% mortality in games where real mortality was 30–50%. Now, for each (player, unit type) pair we take the death rate among tagged units and distribute the same proportion of deaths across untagged siblings in bornAt order, borrowing death timestamps from the tagged death timeline. Aggregate lost-unit counts now roughly match reality and deaths still cluster around the real battle flashpoints
v0.14.14
— BW movement now follows per-unit selection history- ModifiéBrood War unit trajectories were being assigned by a proximity heuristic — each right-click was attributed to whichever tracked unit happened to be nearest. That produced the 'wandering back-and-forth in base' look, especially for macro armies: the heuristic would hand a Hydralisk the scouting Overlord's move, or spread a single attack-order across 40 zerglings as 40 different drifting paths. Layer 3 now takes a birthKey → tag map from the tag-matching stage and, when a birth has a confirmed tag, follows only the move commands where that tag was actually in the player's currentSelection (fed by the hotkey-group-aware replay stream from v0.14.13). Untagged births still use the proximity fallback so they at least appear on the map
v0.14.13
— BW tag matching reads hotkey groups (better death inference)- CorrigéThe BW tag-lifetime tracker only considered explicit Select commands when extending a unit's lastSeen. Macro players hotkey their army once (ctrl-1), then press 1 + a-move for the rest of the game — those recalls never fire a Select, so the last lifetime stuck at assign frame and the 30-second inactivity fallback prematurely killed the unit for death-inference purposes. Now the tracker snapshots the current selection on Hotkey Assign / Add and restores it on Hotkey Select, so right-clicks issued after a hotkey recall propagate to every tag in the recalled group
v0.14.12
— Tactic detection now SC2-only (skips BW + AI Arena)- CorrigéTactic detection (timeline scrubber tags like 'widow mine drop', 'zergling run-by', 'oracle harass') was firing on Brood War and AI Arena replays. The detectors reference SC2-only unit names and SC2-only timings, so on BW they mostly matched false positives (a Dragoon poke flagged as an Oracle harass, a Lurker burrow flagged as a Widow Mine, etc.). Short-circuited at the source — game === 'sc1' or 'aiarena' returns no tactics, matching the earlier Co-op carve-out
v0.14.11
— BW parser: Zerg unit production + macro-army visibility- CorrigéZerg units were missing from the replay viewer entirely — screp reports Zerg production as 'Unit Morph' commands, but our layer-0 extractor only handled 'Train'. Every Drone, Zergling, Hydralisk, Mutalisk, Overlord, and so on was silently discarded. Now Unit Morph is parsed with the same shape as Train, and Zergling/Scourge emit two births per egg
- CorrigéProtoss/Terran macro armies were also under-counted: all rapid Train commands routed to the most-recently-built producer, and MAX_QUEUE=5 dropped the rest. Now trains distribute across all available producers by shortest queue, so a 10-Gateway Zealot pump actually shows 10-Gateway worth of Zealots on the map
- CorrigéThe strict tag-matching ground-truth layer was also filtering out any produced unit the player never individually Selected. For macro players who mass-hotkey and a-move their armies without clicking, this meant ~75% of produced units vanished. Unit tracks now derive from all raw births; tag matching still runs but only for death inference where it has data
- ModifiéBW schema version bumped to 2 — replays uploaded before v0.14.11 need re-parse to pick up the new unit tracks
v0.14.10
— BW sprites now render proportional to real footprints- ModifiéSprite scale in the replay viewer now consults SC1_UNIT_STATS (our BW unit/building reference) for footprint and collision radius, just like the SC2 path uses UNIT_STATS. Hatchery/Command Center at 4-tile footprint render at the largest size; Spawning Pool/Forge at 3-tile render mid; Photon Cannon and Zerg colonies at 2-tile render smallest — matching the actual in-game proportions. Also swapped the vision-radius lookup to the same helper, so fog-of-war circles use BW sight ranges (Lurker 8 tiles, Overlord 9, etc.) instead of the SC2-only default fallback. Replaces the constant 2.5× fallback shipped in v0.14.8
v0.14.9
— Real BW building art (was letter placeholders)- CorrigéBW replays were rendering two-letter placeholders like 'Ha', 'SP', 'HD', 'La', 'Eg', 'IT' on colored squares for Hatchery, Spawning Pool, Hydralisk Den, Larva, Egg, Infested Terran, and others. The icon resolver was returning the correct file path and Pixi was binding the texture fine — but the underlying .webp files were long-committed stub art (76×76 letters on a purple/brown square). Pulled 30 real BW sprites (17 Zerg buildings + 10 Protoss buildings + Larva + Egg + Infested Terran) from Liquipedia at 128×128. Terran buildings and all combat units already had real art
v0.14.8
— BW building sprites now visible (not just loaded)- CorrigéFollow-up to v0.14.7: the Brood War building sprites were loading and binding correctly in the fullscreen Pixi viewer, but scale defaulted to 1× because UNIT_STATS is SC2-only (no BW footprints). On a full-map isometric view the buildings ended up ~10 px squares and read as missing. Defaulting missing-stats buildings to 1.8× (≈3×3 tile) so they're actually visible; units stay at 1×
v0.14.7
— Brood War building sprites now render- CorrigéBW replays were missing sprites for Hatchery, Spawning Pool, Extractor, Photon Cannon, Citadel of Adun, Templar Archives, Robotics Facility, Observatory, Hydralisk Den, Creep Colony, Evolution Chamber, and other BW-era buildings. The on-screen map's icon cache was calling the SC2-only resolver, which doesn't know about BW's spaced names like 'Spawning Pool' (SC2 uses 'SpawningPool'). Now plumbed the game type through the tab → heatmap → renderer chain so BW replays resolve through SC1_UNIT_ICONS
v0.14.6
— Cast research now actually reads Liquipedia- CorrigéAI cast was telling listeners 'Liquipedia is down'. Two things wrong: Cloudflare Turnstile was 403'ing the Chrome-mimic UA (their API terms ask for a descriptive UA with contact info) and the MediaWiki API was 406'ing because we weren't sending Accept-Encoding: gzip. Tool now uses a polite UA + gzip, auto-rewrites liquipedia.net/starcraft2/<Page> URLs to the api.php parse endpoint, and returns clean plaintext. Also told the narrator explicitly never to mention tool outages or website names on-air
v0.14.5
— Cast gating + autoplay audio hardening- CorrigéLotV / HotS / WoL SC2 replays with a null `game` column (older rows) no longer have the cast button hidden. The gate flipped from 'game === sc2' to 'game !== sc1 && game !== aiarena', so any row whose game isn't explicitly one of the BW-parser variants falls through as SC2
- AjoutéWhen cast autoplay is blocked (Safari, strict Chrome profiles), a 'Tap anywhere to enable cast audio' banner now appears over the map. Previous silent-video behavior misled users into thinking the cast was broken — it was just waiting for a gesture. Also catches the Safari case where play() starts briefly, then the browser pauses the element because user-activation expired
v0.14.4
— Cast autoplay audio-unlock + SC2-only gating- Corrigé?autoplay=cast no longer plays the replay silently. Browsers were blocking the audio element's play() on the new page because the user gesture from the list-card click didn't carry across SPA navigation. The first rejected play() now wires a one-shot click/touch/keydown listener that retries on the next user interaction — audio unlocks the instant you touch the page
- ModifiéPlay w/ Cast is only shown on SC2 replays — SC1, Brood War, and AI Arena replays don't get the cast button or language picker, since the narrator prompt is trained on SC2 units + matchups
v0.14.3
— Co-op cleanup: no tactic scrubbers, stray cast deleted- CorrigéTactic markers no longer appear on co-op replays. The detectors are calibrated for ladder 1v1 and were misfiring on Amon waves (fake gas steals on pre-placed geysers, bogus zergling runby tags, etc). detectTactics short-circuits to [] for Co-op category, and existing co-op rows re-parse their tactics on next view to clear the old noise
v0.14.2
— Co-op icon fixes, cast gated to ladder, research-phase agent- CorrigéCo-op unit icons: Infested Abomination now shows Aberration art (was Ultralisk), Dusk Wing shows a Banshee (was Tempest), Scourge shows the proper Scourge icon (was Mutalisk), Diamondback shows a Vulture (was Hellion), Hybrid Behemoth shows Archon (was Tempest)
- ModifiéPlay w/ Cast is hidden on co-op replays — the narrator is ladder-trained and gave misleading calls on commander kits, so we gate it until a co-op-specific prompt ships
- ModifiéAI cast now runs a short research pass before it writes. Claude calls three tools — our archetype archive, our unit-stat table, and a whitelisted fetch (Liquipedia, TL.net, Aligulac) with browser-shaped headers — to assemble a fact sheet, and the writer can only cite facts that appeared in that sheet. Kills Hardened Shields Immortal / ghost GSL season hallucinations at the source; also removed the hardcoded map / matchup / news blobs from the prompt so facts stay evergreen
v0.14.1
— AI Coach: English, Korean, or Chinese analysis- AjoutéAI Coach now has the same EN / 한국어 / 中文 picker as Play w/ Cast, welded onto the right side of the Analyze button. Claude writes the analysis in the chosen language with coach-style phrasing; JSON keys and severity/category enums stay in English so filtering still works. First run locks the language for the replay
v0.14.0
— Play w/ Cast: English, Korean, or Chinese commentary- AjoutéSmall language picker on the right of the Play w/ Cast button — pick EN / KO / ZH before generation. ElevenLabs turbo-v2.5 handles all three natively; Claude writes the script in the chosen language with caster-style phrasing for each. First generation locks the language for the replay so every future viewer hears the same cast
v0.13.2
— More dropped units rescued + parser audit + DB write fix- CorrigéParser was silently dropping a long tail of units from unit tracks: Hellbats, Warp Prisms, Lurkers, Banelings, Ravagers, Brood Lords, Swarm Hosts. All now alias to their canonical names at ingestion, so they show up on the replay viewer + match build orders + tactic detectors
- CorrigéRe-uploading a replay after a parser bump now actually rewrites parsed_data in the DB instead of returning the stale cache (the file_hash dedup short-circuit was skipping the upsert entirely). Combined with a schemaVersion bump, viewing any older replay re-parses it lazily
- Ajoutéscripts/audit-unit-tracks.ts compares every replay's build orders against its unit tracks, flags name mismatches and silent drops, and exits non-zero past 5 affected replays so future regressions get caught
v0.13.1
— Vikings now render in the full-screen replay viewer- CorrigéTerran Vikings were being silently dropped from unit tracks — both the VikingFighter (air) and VikingAssault (ground) morph forms were in the parser's excluded set, so every Viking's position data got skipped even when the player clearly built them. Now normalized to 'Viking' at ingestion with the morph transition treated as a no-op, so air ↔ ground landings don't flicker army counts. Re-upload an affected replay to pick up the fix
v0.13.0
— Cast pipelines Claude stream + per-beat TTS- PerfPlay w/ Cast generation now streams Claude's output and fires TTS for each beat the moment its narration lands, instead of waiting for the full script. writeScript (30-90s) and synth (15-30s) stages now overlap — wall-time on long replays drops by roughly one full stage
v0.12.6
— Cast mp3 size fix for long games- CorrigéLong-replay Play w/ Cast no longer fails at upload with 'object exceeded max size'. Whole audio pipeline now runs at 32 kbps mono (ElevenLabs fetch, ffmpeg trim, final mix) — a 22-min 3v3 goes from ~21 MB to ~5 MB, well inside the storage bucket cap and far cheaper to fetch + decode on the client
v0.12.5
— Ship blocked v0.12.2-4 cast perf work to production- CorrigéThe last three Play w/ Cast perf passes never actually shipped — every deploy since 2026-04-21 was silently failing because vercel.json asked for a maxDuration above the Pro plan's 800 s cap. Reverted to 800 s so the concurrency bump, beat cap, backfill removal, parallel duration probes, streaming heartbeats, and stage timings all reach prod
v0.12.4
— Cast generation streams keep-alive, stage timings logged- CorrigéPlay w/ Cast generation for long 3v3 / 4v4 replays no longer cut out at the 5-minute network-idle mark — the endpoint now streams heartbeat bytes while it works so proxies keep the connection warm for the full run
v0.12.3
— Cast generation further sped up for long games- PerfDropped the post-synthesis TTS backfill pass (saved 20-50 extra ElevenLabs calls per long cast) and parallelized the 150× ffmpeg duration probes that were running serially — big generation-time reduction for 3v3 / 4v4 games
v0.12.2
— Cast perf for long games + post-upload tactic scrubbers- PerfPlay w/ Cast now fans out TTS at concurrency 12 (up from 6) and caps total beats at 150 for very long 3v3 / 4v4 games, so generation no longer blows past the 5-minute mark on extended matches
- CorrigéTactic scrubbers now appear immediately after upload instead of only after a page refresh — detectTactics runs client-side before the replay lands in the store
v0.12.1
— Cast background-tab fix + replay list coach/cast indicators- CorrigéPlay w/ Cast no longer rewinds / repeats after you tab away — the audio is now the source of truth during cast playback, so the replay cursor catches up to the audio when the tab returns instead of the audio seeking back to a stale cursor
- AjoutéReplay list cards show a sparkle badge when AI coach has already been run and a gold cast button when audio commentary is cached — click either to jump straight into the replay with that tab open or cast auto-playing
v0.12.0
— Strategy tab + AI cast opening speculation- AjoutéStrategy tab in the full-screen replay viewer auto-matches each player to the closest pro archetype with a time-weighted similarity score and highlights which beats hit vs missed
- AjoutéPlay w/ Cast speculates between plausible pro archetypes when each player places their first tech-defining structure (Factory, Robo, Roach Warren, etc.) — hedged in real time as builds are revealed rather than guessed from nothing at kickoff
v0.11.0
— AI cast: priority-ranked packer + no-dead-air guarantee- ModifiéPlay w/ Cast now scores every candidate moment (battles, tactics, key builds, matchup/map/news/reflect filler) and packs the most important calls first, so the biggest plays always land on time
- CorrigéSilence gaps >3s are now auto-filled post-synthesis with a shoutcaster filler clip sized to the gap — the cast stays continuous from kickoff to GG regardless of which beats Claude writes shorter
v0.10.0
— Timeline tactics, heatmap calibration, sprite polish- AjoutéTactic markers on the full-screen replay scrubber, color-coded per player with hover popover
- AjoutéColor-coded leading tick per tactic to show where each hover region starts
- ModifiéDetected tactics (cannon rush, proxy, gas steal, worker pull, supply float, recall, drop, etc.) now inform the AI coach
- PerfHeatmap calibrated so intense white is reserved for large battles, not mineral lines or supply depots
- ModifiéThinner per-unit borders in the replay viewer
- ModifiéSC2 unit sprites upscaled 3.4× for crisper zoom
- PerfLighter page weight across the site
- CorrigéNew uploads now populate lobby type (Ladder/Public/Private), battle count, and player region on the replay card
- CorrigéMap resolution for German (Shuttle zu Schutt → Void Launch) and Korean (핵심 부품 → Part and Parcel) co-op mission names, plus AVEX/BGH tournament-prefixed maps and the HotS AfterWar2016 arcade variant
- CorrigéUnit-icon coverage: every distinct unit/building name seen in uploaded replays now resolves — commander prefix/suffix stripping (MengskSiegeTank, TychusSCV, …), SC1-to-SC2 analog fallbacks (Medic → Medivac, ScienceVessel → Raven, …), and an expanded hidden list for mission decorations, cocoons, weapon-effect dummies, and custom-campaign NPCs
- AjoutéAI Commentary button in the full-screen replay viewer — generates a game-time-synced shoutcaster narration (Claude scripts it, ElevenLabs voices it), caches the MP3 on Supabase, and follows the scrubber as you play
v0.9.0
— AI tactics pre-pass, build-orders page, co-op coverage- AjoutéTactic detection for cannon rush, proxy production, gas steal, worker pull, supply float, building cancel, recall escape, drop play, and double extractor — shown in the coach
- AjoutéClickable Key Moments timestamps seek the replay playhead
- AjoutéStandalone /build-orders page with archetype browser, per-step unit icons, 10 new pro builds
- AjoutéCo-op guide, co-op commander unit rosters, 11 co-op mission minimaps
- AjoutéLadder / Public / Private category filter and label on replays
- AjoutéDonate modal triggered by engagement
- AjoutéReplay card shows battle count next to duration, and 1v1/2v2/… game type
- CorrigéProfile page nav now renders in both loaded and not-found states
v0.8.0
— Replays hub, profiles, navigation consolidation- AjoutéNew /replays and /players directory pages
- AjoutéUnified top nav across every page
- AjoutéCleaner shareable URLs for replay pages
- ContenuSeason 1 2026 /guides/maps page
- ContenuProtoss Oracle + strategy FAQs; Zerg and Terran map-pool FAQs
- ContenuEconomy benchmarks and matchup timing windows for all three races
- ContenuUnit counter quick-reference table in the army-composition guide
- ContenuBuild-orders greedy-openers section with 3 new FAQs
- CorrigéSupply cap at 200, corrupt replays rejected cleanly, edge-case map names resolve correctly
v0.7.0
— Donate, April patch content, share flow- AjoutéDonate modal with suggested amounts
- AjoutéShare Replay button on replay results
- ContenuSC2 Patch 5.0.16 guide
- Contenusc2-in-2026 guide with EWC 2026 and BlizzCon coverage
- ModifiéHero banner replaced with a looping 3v3 replay video
v0.6.0
— Map fixes, AI coach polish- CorrigéMap-corruption and unit-morph handling in the replay viewer
- AjoutéAI coach cues layer on the replay viewer
- ContenuMore ladder and community maps covered
- CorrigéPagination and map-name resolution edge cases
v0.5.0
— Brood War support, fog of war, AI Arena- AjoutéStarCraft: Brood War replay support
- AjoutéFog of war toggle with per-unit vision radius
- AjoutéAI Arena replay category; FFA game type
- AjoutéExpansion filter (WoL / HotS / LotV / SC1 / BW / AI Arena)
- AjoutéReplay view counts
- AjoutéBuildings toggle in the replay viewer
v0.4.0
— Battle replay viewer, isometric, full-screen- AjoutéFull-screen replay viewer with WebGL battle rendering
- AjoutéIsometric view, heatmap toggle, death tickers
- AjoutéPlay-and-coach overlap: watch the replay while the coach explains
- AjoutéEmbedded game replay on every analysis tab
- PerfSmoother unit motion at all playback speeds
v0.3.0
— Korean localization, global sort- AjoutéKorean translations across the whole site
- AjoutéGlobal sort across the replay list
- ContenuMore guides in every locale
v0.2.0
— AI coach, strategy tab, guides- AjoutéAI coach with automatic strategy detection
- AjoutéStrategy tab with benchmarks, ideal worker/army ratio, and build-order comparison
- AjoutéGuides section and footer navigation
- ModifiéTighter battle definitions; mobile + typography pass
v0.1.0
— Initial launch- AjoutéUpload a replay and get it analyzed
- AjoutéBattle detection with per-battle army values and unit losses
- AjoutéReplay detail page with Overview / Economy / Army tabs
- AjoutéSide-by-side player comparison