<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>SumoFans release notes</title>
  <subtitle>What changed and when on sumofans.com</subtitle>
  <link href="https://sumofans.com/releases.xml" rel="self" />
  <link href="https://sumofans.com/releases/" />
  <id>https://sumofans.com/releases/</id>
  <updated>2026-06-02T16:47:46Z</updated>

  <entry>
    <id>https://sumofans.com/releases/#1.17.0</id>
    <title>v1.17.0 — Wrestler comparison</title>
    <link href="https://sumofans.com/releases/#1.17.0" />
    <updated>2026-06-02T16:47:46Z</updated>
    <published>2026-06-02T16:47:46Z</published>
    <content type="html">&lt;p&gt;Side-by-side comparison for any two of sumo&amp;#39;s top-rank wrestlers.&lt;/p&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/rikishi/[a]/vs/[b]&lt;/code&gt;&lt;/strong&gt; — 2,701 statically-generated comparison pages over the Ozeki+ roster (every wrestler to reach Ozeki or Yokozuna since 1958, crossed). Each page: paired headers with a leader-highlighted stat table (record, win%, yusho, sansho, height/weight, career length), overlaid career arcs on a shared timeline, head-to-head with per-direction kimarite, full-career fighting-style bars, and top-10 common opponents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/compare&lt;/code&gt;&lt;/strong&gt; — a picker (in the People rail) that builds the canonical comparison URL for any two of those wrestlers.&lt;/li&gt;
&lt;li&gt;Display orders the more-accomplished wrestler left (peak rank tier → yusho → wins); cross-era pairs that never met fall back to a career-style comparison.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Methodology&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Roadmap table refreshed: origins / kimarite / basho / kabu marked Shipped, comparison capability added.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Closes SUMO-56.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.16.0</id>
    <title>v1.16.0 — Brand identity: the 大 mark</title>
    <link href="https://sumofans.com/releases/#1.16.0" />
    <updated>2026-06-02T05:15:57Z</updated>
    <published>2026-06-02T05:15:57Z</published>
    <content type="html">&lt;p&gt;The visual face of the atlas, made real (SUMO-7).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New brand mark&lt;/strong&gt; - a reversed serif 大 (the first character of 大相撲) knocked out of a sumi-ink tile, with a small east-red hanko seal. Replaces the placeholder ring-and-dot favicon. Outlined, so it&amp;#39;s font-independent (no tofu on machines without a Japanese font), with monochrome + full-bleed maskable variants, PNG exports, and a web manifest.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wordmark lockup&lt;/strong&gt; - an outlined mark + 大相撲 + SumoFans master.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refreshed share card&lt;/strong&gt; - the Open Graph image now wears the new mark.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docs/brand.md&lt;/strong&gt; - codifies the colour tokens with names + intent; &lt;code&gt;npm run gen:icons&lt;/code&gt; regenerates the icon family from the baked 大 path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Footer fix&lt;/strong&gt; - the data-range arrow now sits centred against the mono digits.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.15.0</id>
    <title>v1.15.0 — Historical lineage to 1789 + email/kimarite polish</title>
    <link href="https://sumofans.com/releases/#1.15.0" />
    <updated>2026-06-02T04:28:03Z</updated>
    <published>2026-06-02T04:28:03Z</published>
    <content type="html">&lt;p&gt;Extends the historical depth back two centuries, plus polish across emails and the technique glossary.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Yokozuna lineage to 1789 (SUMO-98)&lt;/strong&gt; — parsed the full 75-deep yokozuna lineage from Wikipedia (CC BY-SA) and merged the 37 pre-1958 grand champions into the &lt;code&gt;/history&lt;/code&gt; reigns chart. The Gantt now spans Tanikaze (1789) to today as a true time-scale you scroll horizontally, with names pinned left, the decade axis pinned top, and a synced row hover. Added two all-time records boards beneath it — longest reigns and most championships across the whole lineage. Coverage-tiers flipped Tier 3 to &amp;quot;lineage shipped&amp;quot;. (Tier-2 pre-war bout records still pending a data-source request; champions backfill deferred to a follow-up.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML release emails (SUMO-70)&lt;/strong&gt; — release notifications now render bold, lists, headings, and links instead of raw markdown, via the same pipeline the /releases archive uses. Plain-text fallback retained.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kimarite descriptions (SUMO-79)&lt;/strong&gt; — authored mechanical &amp;quot;how it works&amp;quot; prose for the 34 remaining winning techniques, so every kimarite page now reads cleanly instead of a fallback.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pre-1958 lineage entries are rankings/lineage only (promotion + retirement years, retroactive championship counts) — clearly flagged in the chart.&lt;/li&gt;
&lt;li&gt;Builds read the committed historical snapshot; no upstream fetch at deploy.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.14.0</id>
    <title>v1.14.0 — DevOps: resilient builds + automated live-basho refresh</title>
    <link href="https://sumofans.com/releases/#1.14.0" />
    <updated>2026-06-01T19:00:38Z</updated>
    <published>2026-06-01T19:00:38Z</published>
    <content type="html">&lt;p&gt;First real DevOps phase: builds no longer depend on upstream availability, and live-basho freshness is fully automated.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Committed raw snapshot (SUMO-31)&lt;/strong&gt; — the core sumo-api inputs (rikishis, sekitori stats, current-cycle basho + banzuke) are now tracked in the repo. Builds read from the committed snapshot instead of re-crawling sumo-api ~50x each build, so the site no longer goes stale if upstream is down, and the pipeline runs from sandboxed environments. Added a stage-only &lt;code&gt;data:refresh&lt;/code&gt; helper.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automated live-basho refresh (SUMO-38)&lt;/strong&gt; — a daily GitHub Actions cron (21:00 JST, after bouts finish) plus on-demand trigger. Fetches a fresh snapshot; commits + pushes when bout data changed (production auto-deploys), otherwise pings a deploy hook so date-derived fields (basho status, ages, timelines) still refresh between tournaments. Replaces the by-hand refresh cadence.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Production now builds from the committed snapshot; only the cron (or a manual refresh) fetches new data.&lt;/li&gt;
&lt;li&gt;The committed derived data intentionally drifts from production between refreshes — production is always freshest via the build.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.13.0</id>
    <title>v1.13.0 — Dark mode</title>
    <link href="https://sumofans.com/releases/#1.13.0" />
    <updated>2026-05-31T06:18:20Z</updated>
    <published>2026-05-31T06:18:20Z</published>
    <content type="html">&lt;p&gt;Dark mode arrives. A persistent theme picker in the top bar offers four palettes, applied site-wide with no flash and remembered across visits.&lt;/p&gt;
&lt;h2&gt;Themes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Paper&lt;/strong&gt; - the default sumi-on-parchment dossier&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sumi&lt;/strong&gt; - warm charcoal + bone ink&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Night&lt;/strong&gt; - cool slate, indigo-leaning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inverse&lt;/strong&gt; - near-black, maximum contrast&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The whole atlas reflows from a single set of colour tokens, so every chart, table, and page picks up the active theme. Dark palettes keep the red live-banner and the win/loss bout glyphs legible, and frame borders are tuned per-theme so they recede on dark instead of glowing.&lt;/p&gt;
&lt;h2&gt;Also in this release&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Top-bar brand/nav alignment fix&lt;/li&gt;
&lt;li&gt;Basho board W-L column no longer clips at the edge&lt;/li&gt;
&lt;li&gt;Removed leftover prototype scaffolding that had been publicly reachable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Detail: SUMO-4.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.12.0</id>
    <title>v1.12.0 — AtlasShell theme + entity chrome + mobile</title>
    <link href="https://sumofans.com/releases/#1.12.0" />
    <updated>2026-05-31T04:56:21Z</updated>
    <published>2026-05-31T04:56:21Z</published>
    <content type="html">&lt;p&gt;Eighth wave: a full chrome standardization on the new AtlasShell, a Tournaments restructure, unified entity-page navigation, and a mobile-readiness pass.&lt;/p&gt;
&lt;h2&gt;Chrome (Theme v2)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;AtlasShell is now the single chrome across the whole site: kanji top bar + bucket tabs, Stripe-Docs-style left rail, shared footer, and a mobile hamburger drawer.&lt;/li&gt;
&lt;li&gt;Per-bucket section numbering (F/T/P/W/H/M); Foundations gains a &amp;quot;Start here&amp;quot; intro.&lt;/li&gt;
&lt;li&gt;Display font is latin-only Noto Serif JP with system-mincho fallback for kanji (dropped the ~4MB JP webfont and the load-in font wiggle).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tournaments&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Restructured to Current basho (adaptive: live board or the latest completed, with the outcome sankey folded in) + a Winners page (yusho, sansho, milestones). Old routes redirect.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Entity navigation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shared breadcrumb (SumoFans / bucket / page) + consistent footers across all 12 directory and detail pages, replacing the legacy &amp;quot;Dashboard / History&amp;quot; pager.&lt;/li&gt;
&lt;li&gt;Unified link styling: quiet nav links vs the universal red-dotted profile marker.&lt;/li&gt;
&lt;li&gt;Top-of-content alignment normalized so the rail, the main column&amp;#39;s first line, and the right TOC top-align on every page type.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Mobile&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No horizontal overflow 360-414px; dense tables scroll, verbose tables stack; previously-blank sections now render; drawer QA passed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Issues: SUMO-83, SUMO-84, SUMO-85, SUMO-86. Follow-ups filed: SUMO-89 (shared PageMast), SUMO-90 (board sticky column).&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.11.0</id>
    <title>v1.11.0 — Seventh entity wave: /origin + /kimarite</title>
    <link href="https://sumofans.com/releases/#1.11.0" />
    <updated>2026-05-26T03:30:32Z</updated>
    <published>2026-05-26T03:30:32Z</published>
    <content type="html">&lt;p&gt;Two new profileable entities ship in this wave, doubling down on the entity-microsite pattern established by /heya, /basho, /kabu.&lt;/p&gt;
&lt;h2&gt;/origin/[slug] — 61 birthplace pages (SUMO-46)&lt;/h2&gt;
&lt;p&gt;Every wrestler&amp;#39;s birthplace, aggregated across the historical-Makuuchi cohort (1958-present):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;47 Japanese prefectures&lt;/strong&gt; + &lt;strong&gt;14 foreign countries&lt;/strong&gt; (Mongolia, U.S.A., Russia, Georgia, Brazil, Egypt, Philippines, ...)&lt;/li&gt;
&lt;li&gt;Cohort-aware directory: filter Japan / Foreign-born, sort by roster size, championships, era&lt;/li&gt;
&lt;li&gt;Per-origin page: header tiles, continuous decade-debut chart (opacity-encoded intensity), full Makuuchi roster sorted by peak rank&lt;/li&gt;
&lt;li&gt;Cross-linked from the dashboard Origins section and every &lt;code&gt;/rikishi/[id]&lt;/code&gt; infobox shusshin line&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Top counts: Tokyo 35, Mongolia 33, Hokkaido ~33, Hyogo ~27, U.S.A. 6 (all Hawaiian).&lt;/p&gt;
&lt;h2&gt;/kimarite/[technique] — 84 winning-technique pages (SUMO-47)&lt;/h2&gt;
&lt;p&gt;Every kimarite (deciding technique) that has finished at least one Makuuchi bout 1958-present:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;84 distinct kimarite&lt;/strong&gt; spanning ~56,578 decisive bouts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KIMARITE_GLOSS&lt;/code&gt; extended with &lt;strong&gt;28&lt;/strong&gt; previously unmapped techniques (kirikaeshi, ketaguri, makiotoshi, ...)&lt;/li&gt;
&lt;li&gt;Per-technique page: family + style badge, authored mechanical detail (when present), continuous opacity-encoded decade-frequency chart, top 50 practitioners by wins&lt;/li&gt;
&lt;li&gt;Sortable + filterable directory across name / English label / family&lt;/li&gt;
&lt;li&gt;Cross-linked from the dashboard Kimarite section and every &lt;code&gt;/rikishi/[id]&lt;/code&gt; winning + losing kimarite table&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Top techniques: yorikiri (29.6%), oshidashi (16.8%), hatakikomi (7.0%), uwatenage (6.1%), yoritaoshi (5.0%).&lt;/p&gt;
&lt;h2&gt;Marker coverage&lt;/h2&gt;
&lt;p&gt;The universal red-dotted profile-link marker now resolves for &lt;strong&gt;7 entity types&lt;/strong&gt;: rikishi, heya, basho, kabu, origin, kimarite, plus glossary.&lt;/p&gt;
&lt;h2&gt;What&amp;#39;s next&lt;/h2&gt;
&lt;p&gt;SUMO-29 (Astro Fonts API migration) is the next perf-focused candidate now that SUMO-32 has shipped the caching + content-visibility wins.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.10.0</id>
    <title>v1.10.0 — Kabu entity</title>
    <link href="https://sumofans.com/releases/#1.10.0" />
    <updated>2026-05-25T20:12:58Z</updated>
    <published>2026-05-25T20:12:58Z</published>
    <content type="html">&lt;p&gt;Adds &lt;strong&gt;&lt;code&gt;/kabu&lt;/code&gt;&lt;/strong&gt; and 104 per-kabu lineage pages as the fifth profileable entity on sumofans, alongside Rikishi, Heya, Basho, and the dashboard.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/kabu&lt;/code&gt; directory&lt;/strong&gt; — 5-column ichimon layout with an SVG ichimon × lineage-depth heatmap on top. Cards sorted deepest-first to mirror the heatmap; each card surfaces kanji + romaji, current holder (with /rikishi link where matched), JSA role + stable-master mention, and &lt;code&gt;N gen · Xy&lt;/code&gt; depth/age signal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/kabu/[slug]&lt;/code&gt; × 104&lt;/strong&gt; — hero with kanji + romaji + tiles (Holders/Heya/Span/Status), current-holder spotlight, vertical generational timeline (node size + color by peak rank), etymology paragraph drawn from the source article.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bidirectional cross-links&lt;/strong&gt; —&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PostActiveBlock&lt;/code&gt; terminal block on &lt;code&gt;/rikishi/[id]&lt;/code&gt; (99 active oyakata matched)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Now&lt;/code&gt; row in the rikishi infobox showing kabu held + JSA role&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Run by …&lt;/code&gt; hero line on &lt;code&gt;/heya/[id]&lt;/code&gt; (15 of 69 heya) closing the heya ↔ kabu loop&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Holder enrichment&lt;/strong&gt; — Hepburn furigana scrape lifts current-holder match from 0 → 99/104 (95%); a third scrape stage extracts each holder&amp;#39;s JSA role (Chairman / Director / Auditor / Committee Member / Chief, 88/104 resolved) and stable-master status (20/104 confirmed).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Universal &lt;code&gt;KabuLink&lt;/code&gt;&lt;/strong&gt; decorates kabu mentions sitewide with the standard red-dotted-underline profile marker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/methodology/data&lt;/code&gt;&lt;/strong&gt; — new section + live match-quality numbers documenting the data layer honestly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Data sourcing&lt;/h2&gt;
&lt;p&gt;sumo-api has no kabu data and English Wikipedia mostly doesn&amp;#39;t either (kabu kanji URLs resolve to the current holder&amp;#39;s rikishi bio, not the institution). &lt;strong&gt;ja.wikipedia.org&lt;/strong&gt; has dedicated articles at &lt;code&gt;/wiki/&amp;lt;kanji&amp;gt;&lt;/code&gt; with structured 6-column lineage tables (代目 / 引退時しこ名 / 最高位 / 所属部屋 / 襲名期間 / 備考). The &lt;code&gt;年寄名跡&lt;/code&gt; page on ja-wiki organizes the 104 active kabu by their five ichimon affiliations (出羽海 / 二所ノ関 / 時津風 / 高砂 / 伊勢ヶ濱).&lt;/p&gt;
&lt;p&gt;A second-stage scrape fetches each current holder&amp;#39;s ja-wiki article and extracts furigana from the lede; a third-stage scrape extracts JSA role + stable-master status. Holder names romanize through Hepburn with long-vowel collapse so &amp;quot;Kakuryuu&amp;quot; matches the roster&amp;#39;s &amp;quot;Kakuryu&amp;quot;. Source URLs + fetch dates surface on each per-kabu page.&lt;/p&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New scraper: &lt;code&gt;scripts/fetch-kabu.ts&lt;/code&gt; (three stages: seed list, per-kabu detail, holder enrichment). Committed cache at &lt;code&gt;data/raw/kabu/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;New library: &lt;code&gt;src/lib/kabu-profile.ts&lt;/code&gt; (&lt;code&gt;listKabuSlugs&lt;/code&gt; / &lt;code&gt;listKabuSummaries&lt;/code&gt; / &lt;code&gt;buildKabuProfile&lt;/code&gt; / &lt;code&gt;kabuMatchStats&lt;/code&gt; / &lt;code&gt;rikishiKabuEntries&lt;/code&gt; / &lt;code&gt;depthOpacity&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;New components: &lt;code&gt;KabuLink&lt;/code&gt;, &lt;code&gt;KabuTimeline&lt;/code&gt;, &lt;code&gt;KabuMatrix&lt;/code&gt;, &lt;code&gt;KabuDirectory&lt;/code&gt;, &lt;code&gt;PostActiveBlock&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Override hooks for the long tail: &lt;code&gt;data/kabu-wiki-urls.json&lt;/code&gt; (irregular URLs), &lt;code&gt;data/kabu-overrides.json&lt;/code&gt; (manual holder→rikishi rescues).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Honest gaps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Historical lineage holders (pre-1958) render as kanji-only — they&amp;#39;re not in our 1958-present roster regardless. The methodology page calls this out.&lt;/li&gt;
&lt;li&gt;5 active oyakata still don&amp;#39;t auto-match (out-of-cache name forms); fixable later via the override file.&lt;/li&gt;
&lt;li&gt;A handful of kabu (e.g., Miyagino post-2024-scandal) have stale ja-wiki content reflected in our data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&amp;#39;s next (v1.11.0 candidates)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/kimarite/[slug]&lt;/code&gt; per-technique pages (SUMO-47)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compare?a=X&amp;amp;b=Y&lt;/code&gt; two-rikishi compare (SUMO-56)&lt;/li&gt;
&lt;li&gt;Manual override pass for the 5 unmatched current oyakata + selective lineage-holder overrides for the headline kabu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read the archive: &lt;a href=&quot;https://sumofans.com/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://sumofans.com/releases/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.8.0</id>
    <title>v1.8.0 — Historical portrait coverage</title>
    <link href="https://sumofans.com/releases/#1.8.0" />
    <updated>2026-05-25T16:13:25Z</updated>
    <published>2026-05-25T16:13:25Z</published>
    <content type="html">&lt;p&gt;Until this release, only the 42 currently-active Makuuchi sekitori had real portraits — every retired wrestler&amp;#39;s profile page (~485 historical Makuuchi rikishi) rendered the silhouette card. This release backfills the corpus.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full-corpus photo backfill&lt;/strong&gt; — the &lt;code&gt;fetch-photos.ts&lt;/code&gt; pipeline now reads from both sumo-api&amp;#39;s current roster &lt;em&gt;and&lt;/em&gt; the 558-strong historical Makuuchi bio set in &lt;code&gt;data/raw/historical/&lt;/code&gt;. Profile-page portrait coverage jumped from 73/558 (13%) to &lt;strong&gt;306/558 (55%)&lt;/strong&gt;. Famous retired yokozuna (Takanohana Kōji, Kitanoumi Toshimitsu, Chiyonofuji Mitsugu, Taihō Kōki, et al.) now show real photos on their &lt;code&gt;/rikishi/[id]&lt;/code&gt; pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wikipedia search quality guards&lt;/strong&gt; — broadening the target set exposed false-positive matches on short or ambiguous shikona (e.g. shikona &amp;quot;Mudoho&amp;quot; was returning Taihō&amp;#39;s article because Wikipedia&amp;#39;s fuzzy search just took the closest famous-wrestler hit). Three new guards keep the cache clean:&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Title gate&lt;/strong&gt; — shikonaEn must start the matched Wikipedia page title.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description filter&lt;/strong&gt; — rejects list pages, &amp;quot;X stable&amp;quot;, manga/anime, fictional characters with &amp;quot;sumo wrestler&amp;quot; descriptions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-ID dedupe&lt;/strong&gt; — a Wikipedia URL claimed by one rikishi can&amp;#39;t be reclaimed by another id with a similar shikona.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cleaner fallback semantics&lt;/strong&gt; — when no authoritative source resolves, the rikishi falls through to the silhouette card. Better than a wrong photo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&amp;#39;s not covered&lt;/h2&gt;
&lt;p&gt;The 252 remaining silhouettes are low-rank one-tournament Makuuchi wrestlers (mostly pre-2000) with no Wikipedia article and no current JSA profile. Closing this trail further would need sumodb scraping or manual curation — separate work.&lt;/p&gt;
&lt;h2&gt;What&amp;#39;s next (v1.9.0 candidates)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Row avatars on the &lt;code&gt;/rikishi&lt;/code&gt; directory (SUMO-73)&lt;/li&gt;
&lt;li&gt;Hover-preview thumbnails on shikona links across the site (SUMO-74)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kimarite/[slug]&lt;/code&gt; per-technique pages (SUMO-47)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read the archive: &lt;a href=&quot;https://sumofans.com/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://sumofans.com/releases/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.9.0</id>
    <title>v1.9.0 — Directory avatars &amp; shikona hover-preview</title>
    <link href="https://sumofans.com/releases/#1.9.0" />
    <updated>2026-05-25T15:42:45Z</updated>
    <published>2026-05-25T15:42:45Z</published>
    <content type="html">&lt;p&gt;Two small follow-ups to v1.8.0&amp;#39;s photo coverage, both about surfacing those portraits earlier in the user&amp;#39;s path.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Avatar column on &lt;code&gt;/rikishi/&lt;/code&gt;&lt;/strong&gt; — every row representing a currently-active rikishi now carries a small 24px headshot in the leftmost column. Retired rows leave an empty cell so the visual rhythm stays even. (SUMO-73)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Site-wide shikona hover-preview&lt;/strong&gt; — hovering any name link with a cached portrait shows a 128×168 floating thumbnail card next to the cursor after a brief delay. Works on the directory, per-rikishi head-to-head tables, banzuke, leaders, basho pages — anywhere &lt;code&gt;RikishiLink&lt;/code&gt; is used. Touch devices opt out via &lt;code&gt;matchMedia(&amp;#39;(hover: none)&amp;#39;)&lt;/code&gt;. (SUMO-74)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How they relate&lt;/h2&gt;
&lt;p&gt;The inline avatar is small, always-visible, and active-only — answers &amp;quot;do I know this person?&amp;quot; at a glance. The hover-preview is larger, on-demand, and includes retired wrestlers — answers &amp;quot;show me this person&amp;quot; without leaving the row. Together they fill the same gap from two sides.&lt;/p&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;RikishiLink.astro&lt;/code&gt; now writes a &lt;code&gt;data-photo&lt;/code&gt; attribute onto each linked shikona when the photo cache has a real entry. A single floating preview lives on &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; (set up in &lt;code&gt;Base.astro&lt;/code&gt;); &lt;code&gt;pointer-events: none&lt;/code&gt; so the cursor never lands on it. The marker affordance (red dotted underline) and the hover-preview compose cleanly — both are entity-agnostic and apply wherever &lt;code&gt;RikishiLink&lt;/code&gt; is used.&lt;/p&gt;
&lt;h2&gt;What&amp;#39;s next (v1.10.0 candidates)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/kimarite/[slug]&lt;/code&gt; per-technique pages (SUMO-47)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compare?a=X&amp;amp;b=Y&lt;/code&gt; two-rikishi compare (SUMO-56)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kabu&lt;/code&gt; elder-name lineage (SUMO-57)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read the archive: &lt;a href=&quot;https://sumofans.com/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://sumofans.com/releases/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.7.0</id>
    <title>v1.7.0 — Subscribe form &amp; release notifications</title>
    <link href="https://sumofans.com/releases/#1.7.0" />
    <updated>2026-05-25T12:13:37Z</updated>
    <published>2026-05-25T12:13:37Z</published>
    <content type="html">&lt;p&gt;This is a meta-release: the site itself learned how to tell you about its own releases.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Subscribe form&lt;/strong&gt; — the footer &amp;quot;Get basho updates&amp;quot; card is no longer a stub. Submitting an email kicks off a double opt-in: confirm in your inbox within 24h to start the subscription.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/releases&lt;/code&gt; archive&lt;/strong&gt; — every past version of sumofans.com, deep-linkable per release (e.g. &lt;code&gt;/releases/#1.6.0&lt;/code&gt;). Also available as an Atom/RSS feed at &lt;code&gt;/releases.xml&lt;/code&gt; for feed-reader users who prefer no email at all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release-notification pipeline&lt;/strong&gt; — when a new version ships (~6× a year, roughly once per basho), confirmed subscribers automatically get a plain-text email with the notes. No tracking pixels, no link wrapping, no analytics. One-click unsubscribe in every email.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Author-anonymity scrubbing&lt;/strong&gt; — all release-note content is sanitized of identifying URLs (GitHub user handles, Linear workspace names) at render time, both on the public archive and in outbound email.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How it works under the hood&lt;/h2&gt;
&lt;p&gt;Fully owned, no third-party SaaS in the path: Cloudflare Pages Functions handle the subscribe / confirm / unsubscribe endpoints; a small Cloudflare D1 database holds the subscriber list; Resend handles SMTP from &lt;code&gt;releases@sumofans.com&lt;/code&gt;. Cost: $0/year at this cadence. Source for everything lives in the repo, same as the rest of the atlas.&lt;/p&gt;
&lt;h2&gt;What&amp;#39;s next (v1.8.0 candidates)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/kimarite/[slug]&lt;/code&gt; per-technique pages (SUMO-47)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/compare?a=X&amp;amp;b=Y&lt;/code&gt; two-rikishi compare (SUMO-56)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/kabu&lt;/code&gt; elder-name lineage (SUMO-57)&lt;/li&gt;
&lt;li&gt;Email polish pass — render markdown as HTML in the release email (SUMO-70)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Read the archive: &lt;a href=&quot;https://sumofans.com/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://sumofans.com/releases/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.6.0</id>
    <title>v1.6.0 — Atlas depth pass (partial)</title>
    <link href="https://sumofans.com/releases/#1.6.0" />
    <updated>2026-05-24T20:30:58Z</updated>
    <published>2026-05-24T20:30:58Z</published>
    <content type="html">&lt;p&gt;Atlas depth pass triggered by a sumostats.com competitive analysis. Five PRs merged in one session.&lt;/p&gt;
&lt;h2&gt;Shipped&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;#31&lt;/strong&gt; &lt;code&gt;docs(data)&lt;/code&gt;: scraping ethics policy in docs/data.md (sumodb robots.txt + JSA + email-the-maintainer-first principle for any new HTML-scrape source)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;#32 SUMO-54&lt;/strong&gt; &lt;code&gt;feat(rikishi)&lt;/code&gt;: four cheap profile-enrichment blocks - fighting-style badge, win-rate-by-opponent-tier table, first-promotion milestone row, similar-rikishi by cosine kimarite similarity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;#33 SUMO-55&lt;/strong&gt; &lt;code&gt;feat(glossary)&lt;/code&gt;: new &lt;code&gt;/glossary&lt;/code&gt; route with 37 terms across 6 cohorts, per-term romaji-slug anchors, DefinedTermSet JSON-LD&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;#34&lt;/strong&gt; &lt;code&gt;fix(glossary)&lt;/code&gt;: footer scoped-style drop hotfix&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;#35 SUMO-48&lt;/strong&gt; &lt;code&gt;feat(basho)&lt;/code&gt;: &lt;code&gt;/basho/[id]&lt;/code&gt; × 404 + &lt;code&gt;/basho&lt;/code&gt; directory with decade buckets; identity-classical header with columnar Dates + Tournament dls; East-West paired banzuke; yusho callout; sansho cards; top kimarite bars; prev/next pager&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Also folded into #35 (microsite polish wave)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rikishi page rewrite&lt;/strong&gt; to left-rail dossier + main column - Vital statistics + Career record + chronologically-ordered Career timeline with CSS-drawn nodes (Yokozuna disc, gold ★ for first yusho, smaller gold dots for repeat yusho, hollow outline for Intai)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EntityNav&lt;/strong&gt; bilingual brand mark (&lt;code&gt;大相撲 SumoFans&lt;/code&gt; in sumi-red) + Glossary refGap entry sitting visibly apart from entity directories&lt;/li&gt;
&lt;li&gt;Sibling directory pages (&lt;code&gt;/rikishi&lt;/code&gt; &lt;code&gt;/heya&lt;/code&gt; &lt;code&gt;/basho&lt;/code&gt; &lt;code&gt;/glossary&lt;/code&gt;) unified on header rhythm (left rule + 2.2rem title + 0.86rem dek + 1100px max-width)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Process&lt;/h2&gt;
&lt;p&gt;Two UI prototype passes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basho header&lt;/strong&gt; (3 variants): Result-first / Identity-classical / Temporal-led → picked B (Identity-classical) after considering yusho-callout-below redundancy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rikishi page&lt;/strong&gt; (5 variants built by parallel Sonnet agents): Career-arc-as-hero / Vertical timeline / Wikipedia infobox / Newspaper masthead / Dossier card → picked C (Wikipedia infobox) with LEFT rail, folded B&amp;#39;s vertical career timeline into C&amp;#39;s left-rail bottom&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Remaining in the v1.6 atlas depth pass (SUMO-53)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SUMO-47 &lt;code&gt;/kimarite/[slug]&lt;/code&gt; per-technique pages&lt;/li&gt;
&lt;li&gt;SUMO-56 &lt;code&gt;/compare&lt;/code&gt; two-rikishi page&lt;/li&gt;
&lt;li&gt;SUMO-57 &lt;code&gt;/kabu&lt;/code&gt; elder-name lineage (requires scrape; see #31 ethics policy)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3 follow-ups filed from the SUMO-54 audit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SUMO-60 Juryo banzuke ingestion (restores the dropped Juryo-debut cell)&lt;/li&gt;
&lt;li&gt;SUMO-61 opponent-tier table gate bump 10 → 30 bouts&lt;/li&gt;
&lt;li&gt;SUMO-62 lower fighting-style secondary co-tag threshold&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3 more atlas-depth-pass follow-ups from the data analysis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SUMO-58 JSA heya metadata scrape&lt;/li&gt;
&lt;li&gt;SUMO-59 JSA portrait fallback after Wikipedia miss&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.5.0</id>
    <title>v1.5.0 — Heya pages &amp; the multi-entity microsite</title>
    <link href="https://sumofans.com/releases/#1.5.0" />
    <updated>2026-05-17T04:25:17Z</updated>
    <published>2026-05-17T04:25:17Z</published>
    <content type="html">&lt;p&gt;Second entity in the SUMO-44 microsite family, on the shared build-time cache.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;69 /heya/[slug] stable dossiers&lt;/strong&gt; + &lt;strong&gt;/heya directory&lt;/strong&gt; — roster (RikishiLink members), all-time yusho/sansho/yokozuna-ozeki produced, active span; sortable/filterable index; SportsTeam JSON-LD. Honest single-stable framing (latest recorded stable per wrestler — explicit caveat; no per-basho/lineage data).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HeyaLink&lt;/strong&gt; marker (shares the universal a.profile-link); HeyaBars + rikishi-profile heya field wired.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-entity nav&lt;/strong&gt; — EntityNav goes live for Heya; baseline-aligned; labels standardized to Japanese-primary romaji with English gloss on hover (Rikishi/Heya/Shusshin/Kimarite/Basho). Two-tier nav (entity bar + back-link), standardized 0.7rem chrome rhythm.&lt;/li&gt;
&lt;li&gt;IA decisions locked on SUMO-49: flat entity URLs (no /item/ prefix), label voice, nav model.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Closes SUMO-45. Built on loadHistoricalCache() — no client JSON, no /rikishi or dashboard regression (634 pages clean).&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.4.0</id>
    <title>v1.4.0 — Athlete profiles &amp; the entity-profile epic</title>
    <link href="https://sumofans.com/releases/#1.4.0" />
    <updated>2026-05-17T03:30:19Z</updated>
    <published>2026-05-17T03:30:19Z</published>
    <content type="html">&lt;p&gt;Athlete-profile feature family (SUMO-17 + SUMO-50), the reference implementation of the entity-profile epic (SUMO-44).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;558 /rikishi/[id] profile pages&lt;/strong&gt; - dense career dossier: honest career-arc SVG (gold ★ yusho / ◆ sansho), record tiles, top-24 head-to-head, kimarite preferences, honors timeline, schema.org Person JSON-LD.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/rikishi directory&lt;/strong&gt; - sortable table of all 558 with combined free-text filter + faceted Status / Peak / Era selects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Universal profile-link marker&lt;/strong&gt; - one &lt;RikishiLink&gt; primitive applied to every shikona site-wide (red dotted underline).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared build-time cache&lt;/strong&gt; - loadHistoricalCache() reused by the whole SUMO-44 family; no client JSON.&lt;/li&gt;
&lt;li&gt;Two gold-accent directory CTAs; docs across data.md / AGENTS.md / styleguide / methodology.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Closes SUMO-17, SUMO-39-43. Partial SUMO-50 (/rikishi index shipped; /heya, /origin, /kimarite, /basho indexes gate on their detail issues).&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.3.0</id>
    <title>v1.3.0 — Rank River + /history hardening</title>
    <link href="https://sumofans.com/releases/#1.3.0" />
    <updated>2026-05-17T01:59:24Z</updated>
    <published>2026-05-17T01:59:24Z</published>
    <content type="html">&lt;p&gt;Phase: /history gets its dense centerpiece, and a live stub-copy bug is fixed.&lt;/p&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rank River (SUMO-35)&lt;/strong&gt; - New scrollable showpiece on /history: every sanyaku+ career since 1958 as a per-basho banzuke-position track. A faint per-tier field of 246 careers + 8 data-derived hero lines (top career-yusho) in distinct signature colors with labels, on a 3436px horizontal-scroll canvas with sticky left axis and decade ticks. New rankRiver aggregation in build-historical.ts using true full-Makuuchi position (not the tier-banded rankValue).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stale stub disclaimer removed&lt;/strong&gt; - Coverage.astro had a hardcoded note (live on prod) claiming the real 67-year corpus was placeholder estimates. Gone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; - The Tier-1 historical pipeline + /history were discovered to be already shipped (PR #8); SUMO-34 was closed as already-delivered and the genuinely-new work (Rank River + the stub fix) tracked under SUMO-35.&lt;/p&gt;
&lt;p&gt;Past releases: &lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.2.0</id>
    <title>v1.2.0 — Live basho analysis + Lighthouse cleanup</title>
    <link href="https://sumofans.com/releases/#1.2.0" />
    <updated>2026-05-16T18:53:50Z</updated>
    <published>2026-05-16T18:53:50Z</published>
    <content type="html">&lt;p&gt;Phase: first live tournament (Natsu 2026) running on the site, plus performance/accessibility hardening.&lt;/p&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Live field-strength analysis (basho banner)&lt;/strong&gt; - A computed editorial read above the yusho race: which yokozuna/ozeki are sidelined and why, what it means for the title, the leader, who&amp;#39;s chasing, and days remaining. Plain-language scaffolding for newcomers; every name/record/count derives from the banzuke and self-suppresses on a full-strength basho.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lighthouse cleanup (SUMO-27)&lt;/strong&gt; - Self-hosted fonts via @fontsource (was render-blocking Google Fonts CDN), eliminated a forced-reflow via matchMedia, removed user-scalable=no, added &lt;main&gt; landmark + progressbar aria-label, darkened --ink-3 for WCAG AA. Accessibility 88 -&amp;gt; 97, Best Practices 100. Remaining font-perf work tracked in SUMO-29.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data accuracy&lt;/strong&gt; - Corrected the foreign-born share dek (40% -&amp;gt; 24%, now matches the live banzuke). Ongoing day-by-day data refreshes for basho 202605.&lt;/p&gt;
&lt;p&gt;Follow-up: SUMO-29 (font subsetting / async loading for Performance 95+).&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.1.0</id>
    <title>v1.1.0 — Historical depth + visualization polish</title>
    <link href="https://sumofans.com/releases/#1.1.0" />
    <updated>2026-05-11T05:48:48Z</updated>
    <published>2026-05-11T05:48:48Z</published>
    <content type="html">&lt;p&gt;First post-launch milestone. Captures the SUMO-1 / SUMO-3 / SUMO-20 / SUMO-21 / SUMO-23 / SUMO-24 / SUMO-26 batch as a coherent &amp;quot;historical depth + scoreboard polish&amp;quot; phase.&lt;/p&gt;
&lt;h2&gt;Highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SUMO-1&lt;/strong&gt; - Tier 1 historical ingest (1958-present, ~67 years, 112,956 bouts). &lt;code&gt;historical.json&lt;/code&gt; shipped alongside &lt;code&gt;derived.json&lt;/code&gt; so the dashboard reads career-relative context without bloating the live snapshot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUMO-3&lt;/strong&gt; - Career-relative historical anchors sprinkled into the Now page (Athletes, Leaders, Stables, Origins, Bodies, last-basho board).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUMO-20&lt;/strong&gt; - Section 03 paired banzuke view rebuilt: one-line wrestler cards with cumulative-wins sparkline of the previous basho, rank-movement indicators (↑/↓ with in-family slot delta), tier-colored shikona, gold yusho sparkline + ★.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUMO-21&lt;/strong&gt; - Opponent IDs lifted into derived data; sansho (special-prize) winners surfaced.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUMO-23&lt;/strong&gt; - Yokozuna lineage Gantt + foreign-born share sparkline on /history.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUMO-24&lt;/strong&gt; - Four-section viz upgrade:&lt;ul&gt;
&lt;li&gt;§14 Origins long-tail collapsed behind &lt;code&gt;+N more&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;§16 Lens 2 rebuilt as a 60-day basho-cycle strip (×6 = a year)&lt;/li&gt;
&lt;li&gt;§17 Kimarite rebuilt as a 7-family card grid&lt;/li&gt;
&lt;li&gt;§19 Moves got a per-tier belt-vs-strike split bar&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SUMO-26&lt;/strong&gt; - Coverage + pipeline stat strips on /methodology, Stack section regrouped into Core vs Tooling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Footer tagline refreshed&lt;/strong&gt;: &amp;quot;Apple silicon. American ingenuity. Irrational optimism. The clankers wrote it. We argued about it.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BanzukeEntry.prevBasho&lt;/code&gt; schema extended with rank/rankFamily/rankNumber/rankValue&lt;/li&gt;
&lt;li&gt;Astro scoped-styles drop pattern: default to &lt;code&gt;&amp;lt;style is:global&amp;gt;&lt;/code&gt; for components with &amp;gt;5 distinct class names (codified in AGENTS.md gotchas)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;derived.json&lt;/code&gt; merge conflict pattern: regenerate via &lt;code&gt;git checkout --theirs &amp;amp;&amp;amp; npm run data:build&lt;/code&gt; (codified in AGENTS.md gotchas)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;package.json&lt;/code&gt; Versioning section + SemVer heuristic table added to AGENTS.md&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Live: &lt;a href=&quot;https://sumofans.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;https://sumofans.com&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <id>https://sumofans.com/releases/#1.0.0</id>
    <title>v1.0.0 — Sumofans.com public launch</title>
    <link href="https://sumofans.com/releases/#1.0.0" />
    <updated>2026-05-10T21:53:01Z</updated>
    <published>2026-05-10T21:53:01Z</published>
    <content type="html">&lt;p&gt;First public launch of &lt;a href=&quot;https://sumofans.com&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;sumofans.com&lt;/a&gt; — a static, opinionated atlas of Makuuchi (professional sumo&amp;#39;s top division). Built in Astro, deployed via Cloudflare Pages.&lt;/p&gt;
&lt;h2&gt;What&amp;#39;s in v1&lt;/h2&gt;
&lt;h3&gt;Dashboard (single page, 19 sections)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Foundations&lt;/strong&gt; — Glossary, Rules, Reading the rankings, Six divisions, The year (schedule), Garb &amp;amp; gear
&lt;strong&gt;Tournaments&lt;/strong&gt; — Live basho board with yusho-race banner, Previous basho 15-day grid, Outcome sankey, Recent champions
&lt;strong&gt;People &amp;amp; places&lt;/strong&gt; — Athletes (42 sekitori cards), Career leaders, Stables (heya bars), Origins, Bodies (weight distribution), Math of a year
&lt;strong&gt;Techniques&lt;/strong&gt; — Kimarite, Sunburst, Moves by rank&lt;/p&gt;
&lt;h3&gt;Methodology&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sumofans.com/methodology&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;/methodology&lt;/code&gt;&lt;/a&gt; — How it works (sources, pipeline, architecture, stack)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sumofans.com/methodology/data&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;/methodology/data&lt;/code&gt;&lt;/a&gt; — schema + calculations with Stripe/Anthropic-style API docs (real-value examples sliced from the live derived.json)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sumofans.com/methodology/caveats&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;/methodology/caveats&lt;/code&gt;&lt;/a&gt; — approximations &amp;amp; known limitations&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Navigation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Collapsible left sidebar with 4 thematic groups + per-context persistence&lt;/li&gt;
&lt;li&gt;Sticky right-side TOC on methodology pages (auto-builds from h2 + section-level h3)&lt;/li&gt;
&lt;li&gt;Mobile sticky top bar with hamburger + auto-hide-on-scroll&lt;/li&gt;
&lt;li&gt;Live-basho indicator (pulsing red dot + LIVE chip) in the sidebar when a basho is running&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Brand&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Sumi-ink-on-parchment palette (no &lt;code&gt;#fff&lt;/code&gt; — pure white was rejected on visual grounds)&lt;/li&gt;
&lt;li&gt;Chapter-rhythm section backgrounds (&lt;code&gt;--paper&lt;/code&gt; for group-starts, &lt;code&gt;--paper-2&lt;/code&gt; inside groups)&lt;/li&gt;
&lt;li&gt;Consistent bout-result iconography (○ win, ● loss, ▢ absent, dotted unplayed)&lt;/li&gt;
&lt;li&gt;Hand-rolled SVG visualizations (sankey, sunburst, weight distribution) — no chart libs&lt;/li&gt;
&lt;li&gt;Anonymized build footer (git hash + sanitized branch + dirty flag)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Infra&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Static-only deploy: every byte read from &lt;code&gt;src/data/derived.json&lt;/code&gt; at build time&lt;/li&gt;
&lt;li&gt;Cloudflare Pages with PR previews at unique &lt;code&gt;&amp;lt;hash&amp;gt;.sumofans-com.pages.dev&lt;/code&gt; URLs&lt;/li&gt;
&lt;li&gt;Apex &lt;code&gt;sumofans.com&lt;/code&gt; (HTTPS, HSTS, Full-Strict), &lt;code&gt;www&lt;/code&gt; 301-redirects to apex&lt;/li&gt;
&lt;li&gt;SEO basics: full OG tags, Twitter cards, sitemap, robots.txt, distinct page titles + descriptions&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Mobile guardrails (SUMO-18/19)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;overflow-x: hidden&lt;/code&gt; + &lt;code&gt;touch-action: pan-y&lt;/code&gt; at the html/body level&lt;/li&gt;
&lt;li&gt;Comprehensive &lt;code&gt;minmax(0, 1fr)&lt;/code&gt; sweep across all grid templates (Safari/WebKit min-content propagation)&lt;/li&gt;
&lt;li&gt;Seven dense desktop sections (live basho, last basho, schedule, recent yusho, stables, year breakdown, moves by rank) hidden at ≤700px via &lt;code&gt;data-mobile-hide=&amp;quot;true&amp;quot;&lt;/code&gt; with a single banner explaining: &amp;quot;Optimized for desktop&amp;quot;&lt;/li&gt;
&lt;li&gt;Real mobile redesign deferred to v2&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;v1 issues closed&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;SUMO-2&lt;/td&gt;
&lt;td&gt;Provision sumofans.com on Cloudflare and wire up Pages deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-5&lt;/td&gt;
&lt;td&gt;SEO basics: titles, meta, OG tags, robots, sitemap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-9&lt;/td&gt;
&lt;td&gt;Improve navigation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-10&lt;/td&gt;
&lt;td&gt;Reorder tournaments section&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-11&lt;/td&gt;
&lt;td&gt;Expand aperture of methodology &amp;amp; data sources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-12&lt;/td&gt;
&lt;td&gt;Refactor sidebar numbering and ordering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-13&lt;/td&gt;
&lt;td&gt;Drop &amp;quot;methodology →&amp;quot; link in top-right header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-14&lt;/td&gt;
&lt;td&gt;Bodies &amp;amp; life group expanded on methodology pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-16&lt;/td&gt;
&lt;td&gt;Enrich Live tournament section header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-18&lt;/td&gt;
&lt;td&gt;Refactor for responsive experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SUMO-19&lt;/td&gt;
&lt;td&gt;Remove white space below section 19&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Deferred to v2&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SUMO-1 — Live-basho data refresh automation (CF cron + &lt;code&gt;gh workflow run&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;SUMO-6 — Real subscribe form (Resend or Buttondown)&lt;/li&gt;
&lt;li&gt;Historical data ingest (1958–present via sumo-api)&lt;/li&gt;
&lt;li&gt;Real mobile pass for the seven hidden desktop sections&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Stack&lt;/h2&gt;
&lt;p&gt;Astro 5 (static SSG) · TypeScript · plain CSS with custom-property design tokens · vanilla TS for interactivity · hand-rolled SVG for all visualizations · &lt;code&gt;tsx&lt;/code&gt; for pipeline scripts · &lt;code&gt;@resvg/resvg-js&lt;/code&gt; for OG image rendering · &lt;code&gt;@astrojs/sitemap&lt;/code&gt; · Node 22 · Cloudflare Pages&lt;/p&gt;
</content>
  </entry>
</feed>