<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 杨宗历</title>
    <description>The latest articles on DEV Community by 杨宗历 (@_edae8c37f72bcd7bfe4af).</description>
    <link>https://dev.to/_edae8c37f72bcd7bfe4af</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4063990%2Fcd14b06e-7122-4045-afde-b5700dcbc2a6.jpg</url>
      <title>DEV Community: 杨宗历</title>
      <link>https://dev.to/_edae8c37f72bcd7bfe4af</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_edae8c37f72bcd7bfe4af"/>
    <language>en</language>
    <item>
      <title>Designing a Scenario-Driven Tier List UI Without Pretending It Is a Meta Engine</title>
      <dc:creator>杨宗历</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:29:48 +0000</pubDate>
      <link>https://dev.to/_edae8c37f72bcd7bfe4af/designing-a-scenario-driven-tier-list-ui-without-pretending-it-is-a-meta-engine-47bh</link>
      <guid>https://dev.to/_edae8c37f72bcd7bfe4af/designing-a-scenario-driven-tier-list-ui-without-pretending-it-is-a-meta-engine-47bh</guid>
      <description>&lt;p&gt;The interface contract&lt;/p&gt;

&lt;p&gt;An editable tier list looks simple until the user tries to answer a real question. “Rank these characters” is underspecified. A useful interface must let the user define the scenario, narrow the pool, place items, revise decisions, and export a readable result.&lt;/p&gt;

&lt;p&gt;The public HSR editor is a useful black-box example. Its visible contract includes a title field, a prepared pool of 95 character portraits, search/filter affordances, tier rows, local-save status, undo/redo, share-link and preview controls, and PNG export choices. That is an interface observation, not a claim about the private framework or data model.&lt;/p&gt;

&lt;p&gt;Model the states before the components&lt;/p&gt;

&lt;p&gt;The core state is not “a list of cards.” It is a relationship between a scenario, a pool, ordered tiers, and export state:&lt;/p&gt;

&lt;p&gt;type RankingState = {&lt;/p&gt;

&lt;p&gt;title: string;&lt;/p&gt;

&lt;p&gt;pool: { id: string; label: string; included: boolean }[];&lt;/p&gt;

&lt;p&gt;tiers: { id: string; label: string; itemIds: string[] }[];&lt;/p&gt;

&lt;p&gt;history: { past: unknown[]; future: unknown[] };&lt;/p&gt;

&lt;p&gt;save: 'idle' | 'saved' | 'dirty';&lt;/p&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;The type above is a design proposal. It is not an extraction of source code. The important behavior is that moving an item updates one tier without duplicating it, reset is distinguishable from undo, and an export preview does not silently mutate the ranking.&lt;/p&gt;

&lt;p&gt;Interaction questions worth testing&lt;/p&gt;

&lt;p&gt;Can a keyboard or touch user identify where an item will land?&lt;/p&gt;

&lt;p&gt;Does filtering hide items in a way that is reversible and obvious?&lt;/p&gt;

&lt;p&gt;Does a share link preserve title, labels, colors, and positions?&lt;/p&gt;

&lt;p&gt;Can a user recover from an accidental move without losing later work?&lt;/p&gt;

&lt;p&gt;Does the exported image preserve hierarchy at square, landscape, and portrait sizes?&lt;/p&gt;

&lt;p&gt;These are testable contracts even when implementation details are unavailable. They also reveal why “drag and drop” alone is not a sufficient feature specification.&lt;/p&gt;

&lt;p&gt;A small test matrix&lt;/p&gt;

&lt;p&gt;For a practical starting point, &lt;a href="https://tierlistmaker.pro/" rel="noopener noreferrer"&gt;Rankly&lt;/a&gt; shows how a focused ranking surface can keep prepared content and editing controls together. The relevant page is the &lt;a href="https://tierlistmaker.pro/trending-tier-lists/hsr-tier-list-maker/" rel="noopener noreferrer"&gt;HSR Tier List Maker&lt;/a&gt;, which frames the board as a personal ranking rather than an official meta verdict.&lt;/p&gt;

&lt;p&gt;Scope is part of quality&lt;/p&gt;

&lt;p&gt;The page explicitly focuses on HSR character portraits. W Engines, Bangboo, builds, and equipment advice are outside the visible scope. A trustworthy product does not need to imply that every adjacent problem is solved; it needs to make the supported state machine understandable.&lt;/p&gt;

</description>
      <category>design</category>
      <category>frontend</category>
      <category>softwareengineering</category>
      <category>ui</category>
    </item>
    <item>
      <title>Designing a Pokémon Tier List UI: States, Filters, and Honest Scope</title>
      <dc:creator>杨宗历</dc:creator>
      <pubDate>Mon, 17 Aug 2026 08:48:07 +0000</pubDate>
      <link>https://dev.to/_edae8c37f72bcd7bfe4af/designing-a-pokemon-tier-list-ui-states-filters-and-honest-scope-5c12</link>
      <guid>https://dev.to/_edae8c37f72bcd7bfe4af/designing-a-pokemon-tier-list-ui-states-filters-and-honest-scope-5c12</guid>
      <description>&lt;p&gt;A tier-list editor looks simple until the user has more than a few cards. The engineering problem is keeping the user’s question, pool, and output understandable.&lt;/p&gt;

&lt;p&gt;Model visible states&lt;/p&gt;

&lt;p&gt;The interface needs an unranked pool, ranked tiers, an empty state, and a saved/exportable state. &lt;a href="https://tierlistmaker.pro/" rel="noopener noreferrer"&gt;Rankly&lt;/a&gt; visibly includes an unranked library, S–D tiers, local saving, undo/redo, sharing, and PNG export. These are interface observations, not claims about private architecture.&lt;/p&gt;

&lt;p&gt;Treat filtering as first-class&lt;/p&gt;

&lt;p&gt;For a 1,025-entry roster, search alone is not enough. Combine generation, type, category, and final-evolution filters, and show what pool is currently visible.&lt;/p&gt;

&lt;p&gt;Make ranking semantics explicit&lt;/p&gt;

&lt;p&gt;“S tier” is a display label, not a definition. A title field and custom tiers let users state “Gen 1 favorites” or “Nuzlocke viability.”&lt;/p&gt;

&lt;p&gt;Test the transitions&lt;/p&gt;

&lt;p&gt;Move a filtered result into and out of a tier.&lt;/p&gt;

&lt;p&gt;Clear filters and verify the expected pool.&lt;/p&gt;

&lt;p&gt;Add or rename a tier without losing placements.&lt;/p&gt;

&lt;p&gt;Verify undo and redo cover advertised actions.&lt;/p&gt;

&lt;p&gt;Verify save, share, and export feedback.&lt;/p&gt;

&lt;p&gt;Check the primary actions on small screens.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://tierlistmaker.pro/trending-tier-lists/pokemon-tier-list-maker/" rel="noopener noreferrer"&gt;Pokemon Tier List Maker&lt;/a&gt; is a context-specific visual ranking tool, not automatically a competitive database. Expose the state, expose the scope, and test the transitions users can see.&lt;/p&gt;

</description>
      <category>design</category>
      <category>frontend</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
