Changelog

Updates across all SWGOH Tools — mod analyzer, GAC scout, TW counter bot, and more.

v1.38

SiteJune 1, 2026
  • improve Search optimization based on a fresh look at how the site shows up on Google. Character page titles now lead with "Best Mods for [Character] (SWGOH)" instead of "[Character] Mods Guide" — the new pattern matches what every top-ranking competitor (swgoh.gg, gaming-fans, allclash) uses for the same long-tail queries, and the audit showed roughly fifty distinct "[character] mods" searches we were appearing on but not getting clicked. Mod Analyzer title now includes the word "Optimizer" explicitly since that's the actual searched term that other tools dominate; the differentiator is scoring rather than auto-optimization. ROTE Planner title leads with "Plan Your Rise of the Empire" to anchor it as SWGOH-specific when Google would otherwise interpret "rote" as "route". News articles now show a tool callout both above and below the body — most readers scroll past the top placement, and the bottom placement catches engaged readers right when they're deciding what to do next

v1.37

AdvisorMay 30, 2026
  • improve Step back, swap the engine. The advisor chat now runs on a stronger reasoning model with hidden reasoning enabled instead of the speed-tuned model it had been using. That model swap is the single biggest quality lever — most of the prior failure patterns (invented percentages, doubling down on wrong relic claims, mixing up zeta and omicron gates) were the speed model under load on a long, rule-heavy prompt. Output budget raised from ~600 words to ~2000+ so composite-ranked zeta and omicron lists plus cross-comparison answers stop silently truncating mid-list. Tone rewritten as a knowledgeable SWGOH friend rather than a corporate help bot — the prior "be direct and terse" framing was actively fighting the rule that says to apologize and concede when corrected, and the model kept choosing terse over honest. Numbers rule trimmed from a list of eight forbidden percentage examples down to one short sentence; the long version was a textbook case of "the more you forbid it, the more you remind the model the option exists." Signal tags on each zeta and omicron line had one last numeric leak ("tier 1", "tier 2") that's now replaced with a qualitative bucket

v1.36

AdvisorMay 27, 2026
  • fix Three fixes from a real chat where the advisor was still inventing percentages and pretending to rerank. Root cause for the percentages: the composite ranker was emitting strings like 'popularity 67%' in the signal tag, giving the model a template to fabricate 'leads at 75% offensive win rate' style numbers downstream. Signal tags now use qualitative buckets ('popular meta leader', 'you use this character often') with zero percentages anywhere in synthesized content. Numbers rule in the prompt got extended with the new fabricated examples (75% offensive, 70% offensive, 44% of teams, 10% of teams) for direct pattern-match avoidance. New rerank rule: the composite ranking is fixed at load time and the model is now told this explicitly — it can FILTER the list (drop entries not matching a constraint like 'only GAC') but cannot reorder. When asked to rerank, the honest answer is 'the ranking is fixed; here's the filtered list'. To make 'exclude TW omicrons' an actionable filter for zetas, each zeta that's a precursor for an unlearned omicron now carries the precursor's mode list — 'unlocks an unlearned omicron on the same ability in [GAC + TW]' — so the model can act on mode-based filter requests

v1.35

AdvisorMay 27, 2026
  • new Zeta and omicron lists now rank from real data, not just a community sheet. Previously the advisor dropped any ability the community priority sheet didn't catalog — so a character like Maul (Hate-Fueled) whose zetas exist in the game but aren't on the sheet showed up nowhere, while characters like General Veers ranked highly despite never being used. The new composite ranker scores every unlearned zeta and omicron on every character at level 50+ from six signals: community sheet tier when present, team-fit (active = you're building this team / meta = on a meta team you don't have detected / none), how many GAC slots you actually fill with this character across your last 10 seasons, how popular the character is as a leader in scraped meta data, whether the ability is a precursor for an unlearned omicron on the same slot, and your investment level (character GP, GL flag). The same six-tier label set (must-have / high priority / solid / situational / low priority / skip-tier) is preserved, but it's derived from the composite score so a heavily-used unranked character can outrank a sheet-favored character you never play. Each line also carries a 'signals' tag explaining what drove the score, so the advisor can answer 'why is X ranked here'. Precursor-for-omicron is surfaced as a positive signal on the matching zeta, so when an omicron requires the zeta first you see both: 'apply the zeta to unlock this omicron'

v1.34

AdvisorMay 27, 2026
  • improve Internal cleanup of how the advisor's instructions are organized. The opening Absolute Mode block — which had been driving the recent doubling-down and refusal-to-apologize behavior — was removed and replaced with two lines of tone guidance. Critical rules (no invented numbers, level 85 + omega gating not 7★, accept corrections, hypotheticals don't reshape lists) were moved to the top of the prompt where the model actually reads them, instead of being buried under 200 lines of static raid lore. Six redundant "don't invent" reminders that had been scattered through the per-section notes were consolidated into a single global Numbers rule with concrete forbidden examples. The raid reference content (Order 66, Naboo, Krayt, Speeder Bike) was collapsed to a denser shape while keeping every fact the advisor actually uses. No new features — just structure, so the rules that matter get attention

v1.33

AdvisorMay 27, 2026
  • fix Three follow-on fixes from another real chat. The advisor was claiming "zetas can only be applied to 7★ characters" as a game rule — that's wrong; the actual gate is character level 85 plus the ability already at omega tier. The wrong claim has been removed from both the reason strings and the prompt, replaced with "currently N★, keep farming until level 85 + omega ability" so the recommendation stays useful without misstating the rules. The hallucination guardrail was strengthened with concrete forbidden examples ("95% of meta teams", "leads at 19% defensive hold", "used by 44% of teams") and a positive substitute list ("a frequent teammate", "a common defense leader") — the prior guardrail told the model not to invent numbers but didn't show what counted as inventing, and the model kept doing it. And when you ask about a specific character missing from the zeta or omicron list, the advisor now checks the OTHER list before answering — Maul (Hate-Fueled)'s priority abilities are omicrons, not zetas, and saying that directly is the right response instead of repeating the unchanged zeta list

v1.32

AdvisorMay 27, 2026
  • fix Zeta and omicron lists now surface farm-targets and weight by who you're actually building. Sub-7★ characters with must-have or high-priority zetas/omicrons (Maul Hate-Fueled, etc.) appear with a "currently N★, farm to 7★ to apply" tag instead of being silently filtered out — the strategic answer is "farm him first", not "he's not in the list". Each entry also picks up a team-fit tag (on a team you're building / on a meta team you don't have detected / not on any meta team), and within each priority tier the list now sorts active > meta > none so high-tier picks on characters you don't use don't drown out picks on built squads. Hallucination guardrail added to the prompt: the advisor will no longer invent percentages like "leads at 19% defensive hold" or "used by 44% of teams" unless those exact numbers appear in the grounding data; if the figure isn't available, it says so. Hypothetical premises ("assume all R9") no longer trigger fabricated new lists — the underlying priority is tier-based, not relic-based, and the model now says that instead of generating a parallel list of made-up reasons

v1.31

AdvisorMay 27, 2026
  • fix Three fixes from a real chat where the advisor confidently told a player their R7 characters were R9 and then refused to back down. Root cause: zeta and omicron priorities are sourced from swgoh.gg, whose per-player API can lag Comlink by hours-to-days, and we were piping that stale relic tier straight into the prompt with no reconciliation. Each zeta/omicron entry's relic tier is now overwritten with the live Comlink value at load. The roster-correction rule was also hardened to override Absolute Mode tone — "never argue with the player about their own account" now explicitly beats the no-soft-closure directive, so corrections get a real concession instead of "the system data is correct". And swgoh.gg links are now in-scope: ask "link me to my Maul on swgoh.gg" or "link to my profile" and the advisor returns the URL instead of refusing

v1.30

AdvisorMay 26, 2026
  • new Guild platoon depth is now part of the advisor's chat grounding. Ask "is my guild ready for ROTE phase 3", "what does our guild need to farm", or "what's our platoon weakness" and the advisor surfaces the same thin-coverage rollup the welcome card already computes — missing characters (nobody at 7★ R7+), critical (1-2 members), thin (3-5 members) — plus the worst thin characters used in platoons. Welcome-card hits that complete after chat starts now reach the next message instead of staying invisible until the next reload. When the depth report hasn't been computed yet, the advisor says so and points at the refresh button instead of inventing numbers

v1.29

AdvisorMay 26, 2026
  • new Relic breakdown and PvP standing are now part of the advisor's grounded context. Ask "how built is my roster", "how many R9s do I have", or "who's at R8 right now" and you get per-tier counts (R1 through R9), R5+/R7+/R9 rollups, and the actual character names at your top tier plus R7 and R8 — no more leaning on the 5-character R9 candidate list to describe an entire roster. Ask "what league am I in", "where do I rank in squad arena", or anything calibration-shaped and the advisor pulls live GAC league + division + skill rating alongside squad and fleet arena rank, so a Kyber D1 player asking for defense ideas no longer gets the same generic meta picks as an Aurodium D3 player. Fleet arena rank consolidated into the new PvP standing block; "how's my fleet" still surfaces it

v1.28

AdvisorMay 26, 2026
  • new Datacron coverage is now grounded against your actual cron inventory. Ask "how many L9 datacrons do I have", "where do I stand on Kyber GAC coverage", or "what's my Set 27 count" and the advisor pulls per-set L9 / L6+ / total numbers from the data it already loads from your swgoh.gg profile. Active rotation is reported first — Set 27 (Armor and Instinct), Set 28 (Power for Hire), Set 29 (Edict and Uprising) — alongside the Kyber competitive bar of roughly 8-12 L9s per active set. Older sets that have rotated out of Kyber are listed separately so you can see what's no longer pulling weight. No more guessing whether the SEE L9 you remember rolling is one of the 8 you need to keep up with Kyber 1 defenses

v1.27

AdvisorMay 26, 2026
  • new Raid-score questions now answer against your real roster instead of falling back to GAC priorities. Ask "how do I raise my Order 66 raid score" or "best raid team for me" and the advisor walks through the high-leverage squad candidates — Tarkin lead + Dark Side Clone Troopers, the Pirate King Hondo + Hondo duo, full Pirate squad, the Jedi Vanguard core, and the Kelleran + Shaak floor — each tagged with how many members you own at 7★ and the relic level of each. Highest-leverage R9 pushes for raid score are surfaced separately from the general R9 list, because the math is different: R9 Tarkin + R9 Scorch beats a generic GL R9 push for raid score thanks to the 12× tier multiplier. Faction depth (Jedi Vanguard / Bad Batch / Dark Side Clone Troopers / Pirates) is reported alongside so you can see where the bench is thin

v1.26

AdvisorMay 26, 2026
  • new The advisor now grounds answers in your real GAC and TW history. Ask "what did I defend with last GAC", "my win rate vs Rey", "my offense leaders", or any history-shaped question and you'll get the actual counts pulled from your last 10 seasons of scraped matches — not a generic answer. Three breakdowns are computed per mode (5v5 for GAC, 3v3 for TW): defenses you set most often with hold rate, offense leaders you take most often with win rate, and opponent leaders you faced most often with your win rate against them. Players whose ally code hasn't been scraped yet get a plain "no history on file" — no invented numbers

v1.25

AdvisorMay 26, 2026
  • new Zeta and omicron priorities now answer "what should I apply next" with real ranked lists against your roster. Both pull unlearned abilities from your swgoh.gg profile and match them against snapshots of the community ranking sheet (https://docs.google.com/spreadsheets/d/1DIM_122R5blIYnqzJkfb9PYVvNvD1Y52trDnjhTYz6o/). Zetas sort by priority tier then character investment. Omicrons additionally tag each entry with the game mode it matters for (GAC / TW / TB / Conquest), so "best GAC omicron" filters correctly and won't return the same answer as "best TW omicron". Replaces the prior generic "data is not available" responses
  • fix Omicron recommender previously dropped any omicron not in swgoh.gg's ability catalog — and the catalog is incomplete, mostly missing leader and unique-skill omicrons. On a 13M-GP mature roster that meant zero recommendations even when ~100 unlearned omicrons existed. The recommender now uses the community sheet as its source of truth instead of the catalog, so leader-skill omicrons like Boss Nass and Mara Jade surface correctly
  • improve Empty omicron and zeta lists now read as "you've already learned all the priority ones" instead of "data unavailable". The prior fallback wording made a populated-but-empty list look like an outage
  • improve Lists in advisor answers (zetas, omicrons, characters, teams) format as bulleted lines instead of paragraph runs. The terse-output system prompt was compressing multi-item answers into single sentences

v1.24

May 22, 2026
  • improve Site pages migrated to Tailwind for styling. No visual change. The old site stylesheet went from 1080 lines to 234 as orphaned rules came out, and the styling layer is now unified with the tool apps (mod analyzer, GAC scout, ROTE planner, advisor) which already used Tailwind. The remaining 234 lines are the JS-applied sticky-shell chip styles, the CSS variable block, and a handful of rules still referenced by markdown-rendered news bodies

v1.23

ROTE PlannerMay 19, 2026
  • new Recent TB results auto-import on each Refresh. Every time you load a guild, the planner pulls the most-recent Rise of the Empire result and appends it to the calibration history (deduplicated by end date). Over the course of a few TBs the model self-calibrates without anyone typing a star count. You can still add older results manually for immediate calibration, and remove anything you don't want included. The data source only exposes one most-recent result per fetch, so the planner accumulates over time rather than backfilling a full history in one shot

v1.22

ROTE PlannerMay 19, 2026
  • improve Combat mission coverage now models cross-CM character allocation. The prior calculation treated each combat mission independently — a member with five R9 dark characters appeared in every dark-side R9 mission's coverage tally as if they could field all of them at once. In reality, a character used in one combat mission cannot be in another the same day, so the displayed coverage was overstating thin-roster guilds where R9 character count is the bottleneck. The new per-day allocator assigns each member's characters to open missions in priority order (required-character missions first, then pool-gated, then generic alignment fills), tracking which characters are committed per day. Coverage on the second and third generic combat missions in a zone now shows lower numbers than the first, reflecting that the same five characters cannot do three missions simultaneously
  • improve Per-mission coverage table now shows the worst day each mission is open as the headline percentage — the binding constraint when a mission is open across multiple days. For zones with preloaded locks, a per-day breakdown shows where character budget ran thin, so officers can see at a glance which day to preload around. A new thin-roster days diagnostic above the table reports how many members ran short on character budget in each day, signaling that R-floor character count rather than roster breadth is the gating factor
  • improve Capital ship combat missions are now tracked as a separate budget from ground squads. Owning a capital ship at 7★+ contributes to every fleet mission the ship gates without competing with ground combat missions — fleet missions and ground missions don't share characters in actual play, and the model now reflects that

v1.21

ROTE PlannerMay 18, 2026
  • improve Star projections retuned against a second guild's TB run. The prior model was systematically hot on per-day 5 and per-day 6 combat missions — the Vandor / Kafrene / Malachor / Mandalore zones came in at 65 to 85 percent of the predicted combat mission yield while the early days landed within a star or two of observed. Three small adjustments correct the bias: generic R9 combat missions take a tighter difficulty discount (32 percent of paper coverage, was 40 percent), squad-gated and fleet combat missions at R8 and R9 now also apply an enemy-difficulty discount (90 percent at R8, 70 percent at R9) because having the gating squad on paper is not the same as clearing the actual late-day enemy waves, and a per-day yield scale knocks day 4 down 3 percent, day 5 down 8 percent, day 6 down 12 percent to capture the schedule-fatigue and dropped-attempts pattern visible in the observed data. Net effect: projections come in roughly one star tighter on Normal, with the cut concentrated in the late days where the prior model was hot rather than flattening early days where it landed well
  • data Per-combat-mission coverage diagnostics now reflect the same enemy-difficulty discount that drives the projection. Vandor Jabba R9 reads ~70 percent of squad-on-paper coverage, Haven 50R-T R8 reads ~90 percent, and Malachor Inquisitorius R9 multiplies the trio-coverage by 0.7 — making the surfaced numbers consistent with what the projection actually credits each zone

v1.20

ROTE PlannerMay 4, 2026
  • improve Combat mission yield is now computed per-CM instead of as a smooth aggregate. Each zone's score sums its individual missions weighted by guild squad coverage, so the roster diagnostics can show a per-CM breakdown — Wookiee at Kashyyyk, Aphra crew at Dathomir, Inquisitorius R9 at Malachor — and you see exactly which fight is gating each zone instead of one rolled-up percentage. Replaces over-confident predictions like 'Malachor 3★ via deploys' with the honest read of 'only 4% of your guild can field the R9 Inq squad'
  • improve Reach view restructured into three cards at the top: Now (current ceiling), Next star (smallest +1★ unlock), Stretch project (multi-month bundled work). Click Next star to see the schedule that emerges with the +1M GP step applied, including which zones reshuffle their lock days. The full 4-tier ladder is still available in a collapsed details section below for officers who want the deeper breakdown
  • improve Recent TB results input under roster diagnostics. Enter your last few TB ★ totals and the planner scales every prediction by median(your scores) / model.Normal so the displayed ceiling matches your guild's actual track record instead of the abstract calibration anchor. Shows both calibrated and raw model values on each path card so you can see the gap
  • improve Schedule discipline tier now surfaces what the recommended schedule actually does — per-day star totals (D1: 9★ · D2: 9★ · D3: 7★) and sector-group callouts ('Sector 3: 10★ via preload Kashyyyk to D4'). Replaces the empty 'no actions identified' state with concrete tactical descriptions of why preloads and lock-day choices matter
  • improve Generic combat missions at relic-9 zones (Malachor, Death Star, Hoth, Scarif) apply a 0.4× difficulty discount when computing zone yield. The previous calculation assumed any 5 R9 chars on paper could clear the actual combat — calibration against real TB results showed this overstates by 60%+ on late-day content where the enemies actually fight back
  • improve Phase labels in the planner UI read as 'Day' to match in-game terminology. Engagement editor inputs, zone preload arrows, sector callouts, and the day breakdown all use D1..D6 instead of the prior P1..P6
  • fix Doctor Aphra Dathomir combat mission was reporting 0% guild coverage due to a squad-pool sizing bug — the gate required Aphra plus 4 fillers from a 2-character pool, structurally impossible. Now correctly checks Doctor Aphra + BT-1 + 0-0-0 with 2 generic fill slots, returning realistic coverage that matches observed TB participation

v1.19

May 3, 2026
  • improve Advisor now recommends concrete Order 66 raid squads instead of saying your roster doesn't have Jedi Vanguard. Asking 'what should I work on for the raid' returns the actual community-meta answers: Tarkin + Scorch as a 2-man at R9, Pirate King Hondo + OG Hondo duo, Pirate trio comps, and the Jedi Vanguard ceiling for long-term builds. The advisor cross-references your roster so the recommendation is something you can actually execute, and prioritizes raid-relevant R9 picks over generic Top R9 candidates when the raid is what you asked about
  • fix Advisor was calling Dark Trooper Moff Gideon a Dark Side Clone Trooper allowed in Order 66. The DSCT list is exactly Appo, CX-2, Disguised Clone Trooper, and Scorch. Moff Gideon, Stormtroopers, Death Troopers, and other Imperial Troopers are not on that list and not allowed in the raid. The prompt now spells this out so the advisor stops inferring membership from clone-sounding names
  • improve Recent video corpus now pulls in raid and pirate strategy videos that are tagged 'skim' or older than 30 days. The previous filter was must-watch since April, which excluded the 3.6M Hondo brothers duo, the relic-0 Kelleran and Shaak Ti floor strategy, and the Tarkin clones build. Raid content has a long shelf life, so an OR-pass on raid, order-66, pirates, naboo, krayt, and speeder-bike tags reaches back to November 2025. Digest grew from 15 to 25 entries

v1.18

May 3, 2026
  • new Advisor now references recent SWGOH community video coverage from the last 30 days. Questions about recent updates ('what's in the May 4 update?'), new kit reveals ('how does Cobb Vanth work?'), or current meta picks ('is Stranger still good?') get grounded answers with video links cited rather than 'I don't have info on that recent change' replies. The corpus is regenerated on demand and capped to keep chat latency low

v1.17

May 1, 2026
  • new Advisor now knows about all four modern raids — Order 66, Battle for Naboo, Krayt Dragon Hunt, and Speeder Bike Pursuit. Asking 'who should I push for Order 66?' or 'best Naboo team?' or 'who should I farm for Krayt?' or 'which Imperial Troopers do I need for Speeder Bike?' returns allowed factions, the 7-tier scaffold (G12 → R9 with 1.5× → 12× multipliers), and community max-score patterns (3-man Maul on Naboo, JKR-led Old Republic on Krayt, Veers-led IT-Evasion on Speeder Bike). Replaces a year of generic 'I don't know your raid plan' replies
  • improve News feed now tags Order 66, Jedi Vanguard, Knightfall, Speeder Bike, and Endor Pursuit posts as raid items. The previous regex only matched 'naboo' and 'krayt', so the Order 66 launch post and any Speeder Bike Pursuit coverage were untagged and didn't show up under /news/tag/raid
  • data Internal raid catalog at shared/src/raids.ts covering all four modern raids plus the three legacy raids. Encodes the 7-tier scaffold (G12 / R1 / R3 / R5 / R7 / R8 / R9 with 1.5× / 2× / 3× / 4× / 6× / 9× / 12×) once and reuses it for Order 66, Battle for Naboo, Krayt Dragon Hunt, and Speeder Bike Pursuit. Order 66 and Naboo sourced directly from CG's EA forum announcements; Krayt and Speeder Bike cross-referenced from community guides since CG's old kit reveals on the pre-2024 forums domain are no longer recoverable. Heroic Pit, Heroic Tank Takedown, and Sith Triumvirate are flagged isLegacy=true with empty allowedRoster (no tier gating, no readiness check), kept as informational stubs so the advisor can answer historical questions without hallucinating modern structure onto old content. Foundation for a future raid-readiness tool

v1.16

April 30, 2026
  • improve Twitter cards now emit twitter:title and twitter:description directly instead of relying on og:* fallback. Previews on shares were rendering with default fallback copy on Twitter clients that didn't pick up the og:* tags reliably; explicit tags fix that and let the Twitter copy diverge from the OG copy in the future without a layout change
  • fix Filter and search variants of /news (?q=, ?source=, ?tag=, page>1) now ship robots noindex,follow. Canonical was already folding them into the plain /news index but they stayed crawlable, which wasted crawl budget on permutations Google would discard anyway. The dedicated /news/tag/<tag>, /news/source/<source>, /news/author/<slug> landing pages have their own canonicals and stay indexable

v1.15

April 29, 2026
  • improve All site renderers (layout, components, news, character pages, tools, landing, changelog, about, character-index) ported from template-literal string concatenation to Hono JSX. Same SSR output, same SEO surface — auto-escapes children so the manual esc() helpers are gone, attributes are type-checked, and components compose as functions instead of stitched strings. Void elements now self-close (<link/>, <meta/>) which is valid HTML5 and didn't change rendered behavior
  • fix EA-forum dev posts that exceeded 4000 chars (kit reveals routinely run 30k+) were truncated at ingest, so multi-character kit reveals only got 11% of their source through the pipeline and the resulting summaries were 240 words for posts that had material for 2400+. Cap raised to 80k; affected rows backfilled. New Republic Kit Reveals Pt 1 went from 240 to 2490 words, all three reveals fully covered
  • fix Long dev-post summaries were truncating mid-content when the per-call output budget was too small, and the fallback path persisted partial wrapper text into the rendered article. Output budget raised; the parse path now treats malformed output as a failure and retries on the next pass instead of persisting it
  • fix News cron was stalling for hours when an upstream service returned 503 'high demand' responses. Retry path now falls through to a backup endpoint after two failed attempts, and the per-call timeout raised from 15s to 60s for larger jobs. Cron is back on its hourly cadence

v1.14

April 28, 2026
  • new News feed got a real index page. Featured row at the top shows the most recent post from each source (Capital Games, Discord, Reddit). Posts grouped under date headings instead of one flat list. Pinned banner mechanism for editorial overrides (config in app/src/site/news/pinned.ts)
  • new Search across all news. New input on /news posts to /news?q=, ILIKE across title, tight summary, and full summary. % and _ in the query string get backslash-escaped so they match literally
  • new Canonical landing pages for tags, sources, and authors. /news/tag/<tag>, /news/source/<source>, /news/author/<slug>. Tag chips and source pills now link to these instead of query-string filters. Sitemap auto-emits one entry per tag and per author with a public post
  • new Taxonomy hub at /news/tags. Source cards with post counts, tag cloud sized by frequency, author list with source pill and count. Linked from the news header
  • new Weekly roundup at /news/weekly. Last 7 days grouped by date with a counts-by-source summary line at the top
  • new Item pages now show related posts (up to 4 sharing a tag) and a 'Try it in <Tool>' callout when a tag matches the tool map (rote/tb → ROTE Planner, gac → GAC Scout, gl/relic/kit-reveal → Mod Analyzer, tw → TW Counter Bot)
  • new Updated badge on item pages when a Reddit post was edited at the source after first ingest. Reddit fetcher now captures the edited timestamp; new source_updated_at column also feeds JSON-LD dateModified
  • new Filter combination on tag and source pages. The search/filter form on /news/tag/<tag> carries the tag implicitly so you can narrow further by source without losing it

v1.13

April 27, 2026
  • new News feed at /news. Hourly local watcher pulls from r/SWGalaxyOfHeroes (Capital Games developer posts auto-tagged) plus configured Discord channels, filters for relevance with 10-prior-message context, and produces 500-1000 word summaries with the original source link preserved on every item. RSS at /news.xml. Each item gets a NewsArticle JSON-LD entry plus BreadcrumbList; sitemap auto-includes items over an hour old

v1.12

April 26, 2026
  • improve Mod-analyzer sub-pages (swap-plan, wasted-speed, unused-mods) got per-page How-it-works + FAQ blocks. Crawler-visible word count went from 39-150 to 481-635 per page, each with its own FAQPage JSON-LD. Google had flagged all three as 'Crawled - currently not indexed' due to thin content; this should clear that on the next re-crawl
  • new Multi-chat in advisor. Left rail with a session list per browser, '+ New chat' button, click to switch between conversations, rename inline, delete with 5-second undo. Each session carries its own ally code so you can keep one chat for your account and another for an opponent. Auto-titled from the first message you send. Persists in localStorage; capped at 50 sessions
  • new Advisor now factors in datacron inventory. SEE used to be hard-blacklisted as datacron-dependent, which was correct for most accounts but wrong for anyone who actually owns the L9 cron. The advisor now checks the player's owned datacrons via swgoh.gg and only excludes SEE when no enabling L9 is equipped. Players with the cron see SEE included like any other team. Generalizes to any datacron-gated team we add to the gate map
  • new Top omicron priorities surfaced in the advisor. Pulls every unlearned omicron on a 7-star character, ranks by GAC and TW relevance plus relic investment plus GL bonus. Tells you specifically which omicron mat to spend next, scoped to your roster
  • improve Mod grade scoring now uses per-roll efficiency when available. Two mods with the same speed total but different roll quality (one with three high rolls, one with five mid rolls) used to grade identically. Now the high-quality one grades higher. Roll efficiency comes from swgoh.gg, which exposes the per-roll 0 to 1 efficiency Comlink does not return
  • data Wired up the official swgoh.gg API as a complement to Comlink. Auth via SWGOH_GG_API_KEY env var (x-gg-bot-access header), 1 req per second rate limit. Used for datacron inventory, per-roll mod efficiency, and the ability catalog. Comlink remains the primary live source for everything else

v1.11

AdvisorApril 26, 2026
  • new Chat now grounds character questions in real GAC defense data from this season's matches. Asking 'best aphra team?' or 'why hondo?' surfaces actual teammate frequency, hold rate, and offensive win rate per leader instead of generic kit synergy text. Pronoun follow-ups ('what about her teammates?') inherit the character context from the previous turn so grounding doesn't silently drop
  • data Non-GL meta team baseline bumped from R5 to R7. Aphra, Stranger, EP, Saw, etc. now need an R7 squad average to be flagged 'ready' — R5 was the JMK/SLKR-era bar and was calling teams ready that no longer compete in current Kyber GAC. Weak-point threshold for non-GL squads also bumped from R3 to R6 so partial-readiness reflects what the squad would actually do in a Kyber match
  • fix ROTE special missions that require only a Galactic Legend (P1 Mustafar Lord Vader, P6 Death Star Vader, P6 Death Star Iden) were always reporting as not-ready even when the GL met the relic bar. The squad-fill check ran for faction-locked SMs but mistakenly fell through to faction-less SMs, demanding 4 fill characters from an empty faction list
  • fix Chat history was sending two consecutive user turns upstream on every follow-up (the client appended the message to history before sending; the server appended it again). This suppressed follow-up context recognition. Server now drops the trailing duplicate before forwarding
  • fix Star ratings rendered as '7\*' in chat output because the upstream auto-escapes asterisks to avoid markdown italic and the renderer didn't unescape

v1.10

April 25, 2026
  • new Open Graph images. Six 1200x630 PNGs (homepage + each tool) generated by a Playwright + HTML template script (pnpm og). Reddit, Discord, and Twitter previews now actually render instead of breaking on 404. Twitter card auto-upgrades to summary_large_image when a tool's ogImage is set
  • new Tool splashes inject a How-it-works + Features + FAQ section below the app UI. FAQPage JSON-LD emits for rich-result eligibility. Crawler-visible word count on the analyzer, ROTE planner, and GAC scout splashes went from under 200 to around 500-800
  • new Character pages got a proper H1, a prose intro paragraph that explains the recommended setup, and a related-characters block (eight picks scored by role + priority + GL match). BreadcrumbList JSON-LD on every character page so Google can render the breadcrumb in SERPs
  • improve Analyzer sub-pages (swap-plan, wasted-speed, unused-mods, guide) now have unique titles, descriptions, and canonical URLs matching the intent each page targets. They were in the sitemap with only a generic title before, which Google treats as thin
  • improve GAC Scout had no H1 anywhere on the page. Promoted the welcome heading to a keyword-rich H1. Mod Analyzer H1 was a generic brand label stuck in the sticky header; demoted it to a link and made the welcome heading the real H1
  • improve Tailwind dropped from cdn.tailwindcss.com (~300KB JIT runtime, render-blocking) to a compiled 19KB CSS file. About 16x smaller, no longer render-blocking. Build now runs the Tailwind CLI before tsc; pnpm dev:tailwind watches
  • improve /scout 301s to /gac-scout for symmetry with the existing /analyzer and /guild-tools legacy redirects. applicationCategory in tool JSON-LD unified to GameApplication; was inconsistently UtilityApplication
  • fix Homepage was referencing /og/home.png in og:image but the file did not exist. Every Reddit/Discord/Twitter share rendered a broken preview. Same for the mod-analyzer / rote-planner / gac-scout / advisor / tw-counter-bot OG image refs

v1.9.1

ROTE PlannerApril 2026
  • fix Planet backdrops on the ROTE report were missing in prod. The CSS url was origin-absolute (/planets/...) which bypasses the <base href="/rote-planner/"> tag and 404s at the site root. Switched to a relative path so it resolves under the mount

v1.9

April 2026
  • new Homepage rebuild: FAQ section, popular-character inline links, recent-changes strip, tool cards expanded with specific-number bullets, Why-these-exist restructured with per-tool H3s
  • new Homepage structured data: WebSite SearchAction (sitelinks searchbox), Person schema for E-E-A-T, ItemList of SoftwareApplication entries, FAQPage
  • new Open Graph image meta tags wired up with a /og/* static route. Drop a 1200x630 PNG at app/src/site/og/home.png to populate the social card; twitter:card auto-upgrades to summary_large_image when the image is set
  • improve URL rename: /guild-tools to /rote-planner and /analyzer to /mod-analyzer. More keyword-rich URLs; 301 redirects on legacy paths preserve inbound links and query strings
  • improve Unified sticky header pattern across mod-analyzer, gac-scout, and rote-planner. Title on left, controls pushed right. ROTE planner loader got a proper topbar in place of the centered card
  • improve Umami consolidated from three property IDs to one site-wide ID. End-to-end cross-tool journey analytics in a single dashboard
  • new Umami custom events on the homepage (home-tool-click, home-hero-cta, home-popular-char, home-secondary-click, home-browse-characters) and on the ROTE planner (rote-load-start, view-rote-report, rote-tier-select). Fills the view-unused-mods gap in the analyzer
  • fix ROTE planner Load button did nothing. Bare module specifier in the rote.js import was rejected by browsers; switched both entry HTMLs to ./rote.js
  • fix Mod analyzer sub-tool cards (swap-plan, wasted-speed, unused-mods) 404'd on click. Leading-slash absolute paths bypassed the base tag and landed at the origin root. Fixed the links and also the back-link + pushState URL construction now uses document.baseURI so paths stay mount-aware
  • fix Em dash connector on the Account Advisor tagline replaced with a period. Voice audit follow-up
  • improve Footer expanded with primary tools and characters link. hreflang en + x-default and og:site_name added site-wide

v1.8.1

AdvisorApril 2026
  • fix Markdown lists in advisor replies now render as real ordered and unordered lists instead of broken tags
  • improve Chat upstream now surfaces real failure reasons in server logs so issues are debuggable
  • improve Content-filter sensitivity tuned so SWGOH character names don't trip default filters
  • improve Guild-depth error now distinguishes 'account not loaded' from 'player has no guild'
  • improve Concurrent /load requests for the same ally code now share a single Comlink fetch
  • improve Stale upstream references cleaned up in server and UI (source badge renamed)

v1.8

April 2026
  • new Umami analytics wired up across the site
  • new SEO pass: site name, meta tags, Open Graph across all pages
  • improve About page and tools page reworked
  • improve Page restructuring for clearer navigation between tools
  • fix Trailing slash 404s and self-referencing tool CTAs
  • fix External URLs from env vars: strip trailing slashes, ensure protocol prefix
  • improve Data service reliability: startup logging for DATA_SERVICE_URL, cleaner env handling
  • data Character meta cleanup: role defs, language pass
  • data GAC Scout data cleanup

v1.7

April 2026
  • new Fallback primaries: fix finder now suggests the next-best primary when the ideal isn't available (e.g. Offense % triangle if no Crit Damage is on a lower-priority char)
  • new Global changelog on the site, covering all tools
  • new Comparison section on the mod analyzer tool page and in How It Works, stacking us up against HotUtils and Grandivory's
  • improve Fix list sort: exact primary fixes rank above fallbacks, which rank above speed-only
  • improve Fallback fixes show up in amber in the UI so you can tell them apart from exact matches

v1.7.5

TW BotMarch 29, 2026
  • new TW Counter Bot: Discord bot for recording and querying TW attack results
  • new /tw-attack slash command: log a defense leader, offense leader, win/loss, and notes
  • new /tw-counter slash command: list all recorded counters against a defense leader with win rate
  • new Fuzzy character autocomplete on attack inputs (excludes ships, 25 results)
  • new Per-guild Postgres persistence with command logging
  • data Seeded with known TW counters from chat imports

v1.6

GAC ScoutMarch 18, 2026
  • new Postgres database backend: replaces JSON file storage with proper JSONB-backed persistence
  • improve Scraper speed optimizations: blocks unnecessary resources (images, fonts, CSS) and reduces wait times between pages
  • improve Aggressive cache freshness checks: skips re-scrape if data is less than 4 hours old
  • new Seed script supports direct Postgres insertion via --db / --db-only flags
  • improve Health endpoint now returns player count from database

v1.5

AnalyzerMarch 15, 2026
  • improve Mod fix suggestions now show what the donor character receives in return: no more guessing what happens to the source character's slot

v1.4

March 15, 2026
  • new GAC Scout app: scout opponents before setting defenses and planning attacks
  • new Team detection engine: identifies ~25 meta teams from a player's roster with readiness ratings
  • new Weakness detection: finds undergeared key characters, bad mods on important teams, missing team members
  • new Roster comparison: side-by-side GL ownership, team advantages, mod quality, and key character gaps
  • new GAC season stats extraction: pulls W/L record, offensive/defensive wins, full clears, undersized wins from Comlink
  • data 25 meta team definitions: all 10 GLs plus 15 non-GL meta teams (Naboo, Baylan, Starkiller, DR, JKR, etc.)
  • improve Shared library expanded with team-detection and scout modules for reuse across apps

v1.3

AnalyzerMarch 15, 2026
  • improve Comlink retry with exponential backoff: automatically retries on 502/503/504/429 errors (up to 3 attempts)
  • improve Request timeouts on all Comlink calls:15s for player data, 10s for leaderboard, 5s for metadata
  • improve Graceful error responses:API returns friendly JSON errors instead of crashing when Comlink is unreachable
  • improve Community Popular engine is now non-fatal: if leaderboard fetch fails, analysis continues with other engines
  • improve Frontend error messages updated for production
  • fix GAC leaderboard API: switched from leaderboardType 4 to type 6 (top-50 by league/division), fetches Kyber D1 + D2 for ~100 players
  • fix Ally code validation: server now rejects invalid codes before hitting Comlink (must be exactly 9 digits)
  • improve Structured Comlink logging: all API calls logged with endpoint, status, and timing
  • new Documentation:SWGOH mod system, Comlink API, game concepts, and engine system reference docs

v1.2

AnalyzerMarch 15, 2026
  • new Community Popular engine: grades your mods against what the top 100 GAC players actually equip
  • new GAC leaderboard integration: automatically fetches top Kyber players from live leaderboard
  • new About page, How It Works page, Guide page, Changelog page
  • new Landing page quick-start steps (enter code, check grades, fix mods)
  • improve Auto engine now falls back through: Curated > Community Optimizer > Community Popular > Role Defaults
  • new Swap Plan export: copy plan as text for Discord/guild chat
  • improve Footer navigation added across all pages
  • data Fixed 175+ character roles in community meta to match in-game data
  • data Fixed curated overrides: JML (tank), GL Leia (tank), GL Hondo (support), Third Sister (tank), Baylan Skoll (tank)
  • fix Game units not loading: units moved to segment 3, expanded search range to segments 1-8
  • fix Empty segment arrays no longer break unit loading early

v1.2.1

AnalyzerMarch 15, 2026
  • fix Mod slot mapping:Circle and Triangle (slots 4/5) were swapped, causing wrong slot names in swap plans and incorrect primary stat validation

v1.1

AnalyzerMarch 2026
  • new Compare mode: side-by-side mod comparison with another player
  • new Engine dropdown with curated, community optimizer, and role default options
  • new Mod Recommender page: input a mod, find the best character for it
  • new Wasted Speed page: find high-speed mods on low-priority characters
  • new Swap Plan page: ordered swap chains with backfill steps
  • new Mod Fix Finder: primary mismatches and speed upgrade suggestions
  • improve Per-character mod quality score (0-100)
  • improve Community speed scores: OmegaScore, modQ, HotUtils Speed Score
  • data 316 characters with community mod recommendations from Grandivory/MCW77
  • data 37 hand-curated character overrides for GLs and key meta characters

v1.0

March 2026
  • new Initial release
  • new Live mod analysis via SWGOH Comlink
  • new Character grading system (S through F)
  • new Grade distribution dashboard
  • new Fuzzy character search with detail panel
  • new Role-based mod templates (attacker, tank, support, healer)
  • new Railway deployment with Comlink service