<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feeds/atom-style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://xuanyu.io/</id>
    <title>xuanyu.io</title>
    <updated>2026-07-03T14:15:01.605Z</updated>
    <generator>Astro-Theme-Retypeset with Feed for Node.js</generator>
    <author>
        <name>hex</name>
        <uri>https://xuanyu.io/</uri>
    </author>
    <link rel="alternate" href="https://xuanyu.io/"/>
    <link rel="self" href="https://xuanyu.io/atom.xml"/>
    <subtitle>A personal, writing-first blog by hex.</subtitle>
    <rights>Copyright © 2026 hex</rights>
    <entry>
        <title type="html"><![CDATA[Systems, Not Themes]]></title>
        <id>https://xuanyu.io/posts/systems-not-themes/</id>
        <link href="https://xuanyu.io/posts/systems-not-themes/"/>
        <updated>2026-02-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Why we build design systems instead of selling themes, and what that means for long-term product thinking.]]></summary>
        <content type="html"><![CDATA[<p>There is a difference between a theme and a system.</p>
<p>A theme is a surface. It gives you colors, fonts, and a layout. You install it, adjust a few settings, and move on. It works until it does not. When your needs change, the theme becomes a constraint.</p>
<p>A system is a structure. It gives you rules, relationships, and a way of thinking about your product. It grows with you. It does not need to be replaced — it needs to be understood.</p>
<h2>The problem with themes</h2>
<p>Themes optimize for first impressions. They are built to look good in a preview. They are designed to convert browsers into buyers.</p>
<p>But the people who use them — the ones who build real products — quickly discover the gap between what was promised and what is possible.</p>
<ul>
<li>Customization hits a wall</li>
<li>Components do not compose well together</li>
<li>Updates break things</li>
<li>The original design intent gets lost</li>
</ul>
<p>This is not a failure of any individual theme. It is a failure of the model.</p>
<h2>What a system provides</h2>
<p>A system does not try to look good in a screenshot. It tries to work well over time.</p>
<p>It provides:</p>
<ul>
<li><strong>Consistent spacing</strong> that scales across screen sizes</li>
<li><strong>Typography rules</strong> that maintain hierarchy without manual adjustment</li>
<li><strong>Component patterns</strong> that compose predictably</li>
<li><strong>Constraints</strong> that prevent drift</li>
</ul>
<p>The value is not in what it gives you. The value is in what it prevents.</p>
<h2>Building with restraint</h2>
<p>The hardest part of building a system is saying no. Every feature request feels reasonable in isolation. But systems degrade one reasonable addition at a time.</p>
<p>Good systems are opinionated. They make decisions so you do not have to. They trade flexibility for coherence.</p>
<p>This is the approach we take here. Not because constraints are fashionable, but because they work.</p>
]]></content>
        <author>
            <name>hex</name>
            <uri>https://xuanyu.io/</uri>
        </author>
        <published>2026-02-01T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[On Calm Software]]></title>
        <id>https://xuanyu.io/posts/on-calm-software/</id>
        <link href="https://xuanyu.io/posts/on-calm-software/"/>
        <updated>2026-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Most software demands attention. The best software respects it.]]></summary>
        <content type="html"><![CDATA[<p>Open most applications and they compete for your attention. Notifications, badges, banners, modals. Every surface is an opportunity to interrupt.</p>
<p>This is not a design failure. It is a design choice. These products are optimized for engagement, and engagement requires interruption.</p>
<p>But there is another way to build software.</p>
<h2>Attention as a resource</h2>
<p>Your attention is finite. Every notification, every animation, every unexpected change in the interface costs something. Most software treats this cost as zero. It is not.</p>
<p>Calm software acknowledges this. It does its job and gets out of the way. It does not celebrate itself. It does not demand that you notice it.</p>
<h2>What calm software looks like</h2>
<ul>
<li>It loads fast and stays stable</li>
<li>It does not move things around after the page renders</li>
<li>It uses typography and whitespace instead of color and motion</li>
<li>It provides information without demanding a response</li>
<li>It respects the back button</li>
</ul>
<p>These are not features. They are qualities. You cannot put them in a changelog, but you feel their absence immediately.</p>
<h2>Why this matters</h2>
<p>The tools we use shape how we think. Frantic tools produce frantic work. Calm tools create space for focus.</p>
<p>We build products with this in mind. Not every product needs to be calm. But the ones that do — the ones used for writing, thinking, and building — should be.</p>
<p>This blog is one of them.</p>
]]></content>
        <author>
            <name>hex</name>
            <uri>https://xuanyu.io/</uri>
        </author>
        <published>2026-01-15T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Writing as Interface]]></title>
        <id>https://xuanyu.io/posts/writing-as-interface/</id>
        <link href="https://xuanyu.io/posts/writing-as-interface/"/>
        <updated>2026-01-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The best interface for communicating complex ideas is still plain text.]]></summary>
        <content type="html"><![CDATA[<p>We spend enormous effort designing interfaces. Layouts, components, interactions, animations. All of it in service of communicating something to someone.</p>
<p>But for complex ideas — the kind that require nuance, context, and careful reasoning — the best interface is still a paragraph.</p>
<h2>The limits of visual design</h2>
<p>Visual design excels at orientation. It tells you where you are, what you can do, and what matters most. It is essential for applications, dashboards, and tools.</p>
<p>But it struggles with depth. A card component can hold a title and a summary. It cannot hold an argument. A grid layout can organize information. It cannot develop a thought.</p>
<p>For that, you need prose.</p>
<h2>Why Markdown works</h2>
<p>Markdown is not a design tool. It is a writing tool. It gives you:</p>
<ul>
<li>Headings for structure</li>
<li>Paragraphs for ideas</li>
<li>Lists for enumeration</li>
<li>Code blocks for precision</li>
<li>Links for references</li>
</ul>
<p>Nothing else. And that is exactly right.</p>
<p>The constraint of Markdown forces clarity. You cannot hide weak thinking behind a beautiful layout. The words have to do the work.</p>
<h2>Building for writers</h2>
<p>When we built this blog, we started with the reading experience. Not the homepage, not the navigation, not the visual identity. The paragraph.</p>
<p>Every decision flows from there:</p>
<ul>
<li><strong>Font choice</strong>: optimized for long-form reading</li>
<li><strong>Line length</strong>: constrained to prevent eye fatigue</li>
<li><strong>Spacing</strong>: generous, to let ideas breathe</li>
<li><strong>Color</strong>: neutral, to keep focus on the text</li>
</ul>
<p>The result is not impressive. It is not meant to be. It is meant to be readable.</p>
<p>That is enough.</p>
]]></content>
        <author>
            <name>hex</name>
            <uri>https://xuanyu.io/</uri>
        </author>
        <published>2026-01-02T00:00:00.000Z</published>
    </entry>
</feed>