<?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 Political Quiz UI That Shows Its Assumptions</title>
      <dc:creator>杨宗历</dc:creator>
      <pubDate>Wed, 14 Oct 2026 08:21:08 +0000</pubDate>
      <link>https://dev.to/_edae8c37f72bcd7bfe4af/designing-a-political-quiz-ui-that-shows-its-assumptions-17ba</link>
      <guid>https://dev.to/_edae8c37f72bcd7bfe4af/designing-a-political-quiz-ui-that-shows-its-assumptions-17ba</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fya2nfzkmbgdslmw1gslf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fya2nfzkmbgdslmw1gslf.jpg" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scope of this review&lt;/p&gt;

&lt;p&gt;This is a black-box review of the public interface. It does not describe source code, a private scoring algorithm, or a verified psychometric model. The visible page presents 48 statements on a five-point scale, grouped by axis, and describes a 12-axis result. It also says that answers are calculated in the browser. These are public interface claims, not independently audited implementation facts.&lt;/p&gt;

&lt;p&gt;That distinction matters for political self-assessment. A polished chart can look more authoritative than the questions behind it. The interface should make its model and limits easy to inspect.&lt;/p&gt;

&lt;p&gt;Keep three states visible&lt;/p&gt;

&lt;p&gt;A useful questionnaire UI needs to communicate at least three different things:&lt;/p&gt;

&lt;p&gt;Answer state: which items the person has answered, skipped, or changed.&lt;/p&gt;

&lt;p&gt;Interpretation state: how answers relate to each displayed axis.&lt;/p&gt;

&lt;p&gt;Context state: which parts of the result depend on a country-specific reference.&lt;/p&gt;

&lt;p&gt;If the interface compresses all three into one label, users cannot tell whether a result reflects their answers, the test’s categories, or a localized comparison. A map with separate axes is easier to question than a single unexplained badge.&lt;/p&gt;

&lt;p&gt;Treat political labels as interpretations&lt;/p&gt;

&lt;p&gt;The page includes comparisons with PSOE, PP, VOX, and Sumar, described as editorial references for Spain. A test result should distinguish this kind of comparison from a poll, endorsement, or recommendation. The UI should also make it possible to read the underlying positions before displaying a party match.&lt;/p&gt;

&lt;p&gt;For a design review, ask whether users can answer these questions without leaving the result screen: What does each axis mean? Which end of the scale is represented? Is a percentage a similarity score or a vote prediction? Which country and reference date does a party comparison assume?&lt;/p&gt;

&lt;p&gt;A compact acceptance matrix&lt;/p&gt;

&lt;p&gt;Area&lt;/p&gt;

&lt;p&gt;Example check&lt;/p&gt;

&lt;p&gt;Expected behavior&lt;/p&gt;

&lt;p&gt;Completion&lt;/p&gt;

&lt;p&gt;One answer is skipped&lt;/p&gt;

&lt;p&gt;The result does not silently present an incomplete profile as complete&lt;/p&gt;

&lt;p&gt;Revision&lt;/p&gt;

&lt;p&gt;An answer changes&lt;/p&gt;

&lt;p&gt;The displayed axes update or explain when recalculation occurs&lt;/p&gt;

&lt;p&gt;Interpretation&lt;/p&gt;

&lt;p&gt;A party match is visible&lt;/p&gt;

&lt;p&gt;The page labels it as an editorial comparison, not advice&lt;/p&gt;

&lt;p&gt;Context&lt;/p&gt;

&lt;p&gt;A reader is outside Spain&lt;/p&gt;

&lt;p&gt;The geographic scope remains clear&lt;/p&gt;

&lt;p&gt;Privacy&lt;/p&gt;

&lt;p&gt;The page claims local calculation&lt;/p&gt;

&lt;p&gt;The actual network behavior should be checked separately&lt;/p&gt;

&lt;p&gt;The last row is intentionally a test question. A visible privacy statement is useful, but an interface inspection alone cannot prove network behavior. If privacy is a release requirement, verify it with a network-level test and document the result.&lt;/p&gt;

&lt;p&gt;A useful public example&lt;/p&gt;

&lt;p&gt;12ejes organizes its explanation around 12 axes, including economy, rights, borders, ecology, taxation, Europe, work, digital policy, housing, and security. That breadth can help readers notice that two positions may point in different directions.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.ideologytest.pro/" rel="noopener noreferrer"&gt;Test Ideologia Politica&lt;/a&gt; also illustrates a key UX boundary: its party comparison is explicitly framed as indicative, and the page tells readers to consult official proposals before deciding. That boundary belongs close to the result, where people are most likely to overread a score.&lt;/p&gt;

&lt;p&gt;Questions to carry into implementation&lt;/p&gt;

&lt;p&gt;Before building a similar product, define how incomplete answers work, how uncertainty is communicated, how country references are updated, and how a user can inspect the scoring model. Then test the language with people who hold mixed views, not only with people who already identify with a familiar label.&lt;/p&gt;

&lt;p&gt;The interface is not neutral merely because it uses numbers. Its question wording, axes, examples, and defaults all shape what users see. Make those choices inspectable, and treat every result as a conversation starter rather than an identity assignment.&lt;/p&gt;

</description>
      <category>design</category>
      <category>frontend</category>
      <category>ux</category>
      <category>web</category>
    </item>
    <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>
