<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
  <title>maurycyz.com</title>
  <link>https://aggr.aymericbeaumet.com/sources/maurycyz.com/</link>
  <description>Browse aymeric&#39;s, an independent, searchable archive of readable snapshots from followed feeds, preserved in Git with aggr.</description>
  <language>en</language>
  <atom:link href="https://aggr.aymericbeaumet.com/sources/maurycyz.com/rss.xml" rel="self" type="application/rss+xml"/>
  <lastBuildDate>Fri, 23 Oct 2026 00:37:10 +0000</lastBuildDate>
  <generator>aggr</generator>
  <item>
    <title>Please don&#39;t mess with links</title>
    <link>https://aggr.aymericbeaumet.com/items/lobste-rs/2026-10-23-please-don-t-mess-with-links/</link>
    <guid isPermaLink="false">urn:aggr:item:cefb5e1e936b7782e43cd64a03bac1c9d7904096</guid>
    <atom:link href="https://maurycyz.com/misc/real_links/" rel="via" type="text/html"/>
    <pubDate>Fri, 23 Oct 2026 00:37:10 +0000</pubDate>
    <dc:creator>maurycyz.com via gavinmorrow</dc:creator>
    <description>Comments</description>
    <content:encoded>&lt;p&gt;&lt;strong&gt;2026-05-31&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A link is just a button that takes you somewhere when you click it right?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;CSS&quot;&gt;&lt;span class=&quot;syntax-source syntax-css&quot;&gt;&amp;lt;&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;&lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-css&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-css&quot;&gt;span&lt;/span&gt; &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;&lt;span class=&quot;syntax-support syntax-type syntax-property-name syntax-css&quot;&gt;text-decoration&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-css&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-value syntax-css&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-value syntax-css&quot;&gt;&lt;span class=&quot;syntax-support syntax-constant syntax-property-value syntax-css&quot;&gt;underline&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-terminator syntax-rule syntax-css&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;&lt;span class=&quot;syntax-support syntax-type syntax-property-name syntax-css&quot;&gt;color&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-key-value syntax-css&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-value syntax-css&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-value syntax-css&quot;&gt;&lt;span class=&quot;syntax-constant syntax-other syntax-color syntax-rgb-value syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-constant syntax-css&quot;&gt;#&lt;/span&gt;44EEEE&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-terminator syntax-rule syntax-css&quot;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&amp;lt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;&lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-css&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;&amp;gt;&lt;/span&gt;
&amp;lt;&lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-css&quot;&gt;span&lt;/span&gt; onclick=&amp;quot;window&lt;span class=&quot;syntax-entity syntax-other syntax-attribute-name syntax-class syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-entity syntax-css&quot;&gt;.&lt;/span&gt;location&lt;/span&gt;=&amp;#39;https:&lt;/span&gt;//&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;xkcd&lt;span class=&quot;syntax-entity syntax-other syntax-attribute-name syntax-class syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-entity syntax-css&quot;&gt;.&lt;/span&gt;com&lt;/span&gt;&lt;/span&gt;/&amp;#39;&amp;quot;&amp;gt;100%&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt; legit &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-css&quot;&gt;link&lt;/span&gt;&amp;lt;&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;&lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-css&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;100% legit link&lt;/p&gt;
&lt;p&gt;Except that&#39;s a pale, shallow imitation of a link. A real link can be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opened in a new tab. (ctrl)&lt;/li&gt;
&lt;li&gt;... or a fresh window. (shift)&lt;/li&gt;
&lt;li&gt;... or saved as a file (alt).&lt;/li&gt;
&lt;li&gt;Copied as a URL (right click)&lt;/li&gt;
&lt;li&gt;Used with the keyboard (tab + enter)&lt;/li&gt;
&lt;li&gt;Seen by tools like search engines and screen readers.&lt;/li&gt;
&lt;li&gt;Hovered over to see the URL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... none of which work with a button.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Another common offense&lt;/em&gt; is to use a real link, but hook the click event to open a popup. However, with a real &amp;lt;a target=&amp;quot;_blank&amp;quot;&amp;gt; link, I can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See the loading progress...&lt;/li&gt;
&lt;li&gt;... or/and cancel it.&lt;/li&gt;
&lt;li&gt;... see descriptive error pages and retry if needed.&lt;/li&gt;
&lt;li&gt;Open multiple at once.&lt;/li&gt;
&lt;li&gt;Read the original page while it loads.&lt;/li&gt;
&lt;li&gt;Use my browser&#39;s tabs or/and window manager to organize them.&lt;/li&gt;
&lt;li&gt;Bookmark the page.&lt;/li&gt;
&lt;li&gt;Copy the URL and send it to a friend.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;... and above all, they are consistent:&lt;/p&gt;
&lt;p&gt;I&#39;ve long lost count of how many times I&#39;ve accidentally closed the whole site while trying to close a popup that was a little too convincing.&lt;/p&gt;
&lt;p&gt;It&#39;s also extremely common to click a link with a slow connection, only to be greeted with perpetual spinner. I have no idea if anything is actually happening or how long it will take. Worse, it usually covers up the original page so I can&#39;t even read that!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Browsers are good at links and loading pages: It&#39;s the whole point.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t use javascript buttons as links.&lt;/li&gt;
&lt;li&gt;Don&#39;t build your own loading animations.&lt;/li&gt;
&lt;li&gt;Link previews should open and close on hover, not on click.&lt;/li&gt;
&lt;li&gt;Don&#39;t open links in javascript popups: Use target=&amp;quot;_blank&amp;quot; instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;em&gt;Other common problems&lt;/em&gt;:&lt;/h2&gt;
&lt;p&gt;Infinite scrolling breaks ctrl-f, bookmarks, the home/end keys and often the back button.&lt;/p&gt;
&lt;p&gt;You can have a 100k of text on a page: Browsers will render partially downloaded HTML and the user won&#39;t even notice. Using a 5 MB javascript framework just do a worse job of downloading text is dumb.&lt;/p&gt;
&lt;p&gt;To optimize speed, it&#39;s best to minimize the total number of round trips. Just putting everything in a single TCP connection will always be better than breaking it up because of TCP&#39;s slow start algorithm.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Don&#39;t reimplement &amp;lt;details&amp;gt;&lt;/em&gt; which will break search tools and screen readers.&lt;/p&gt;
&lt;p&gt;... but using fancy CSS to make it look nice is fine.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Don&#39;t roll your own date picker&lt;/em&gt; (or any other built-in form inputs)&lt;/p&gt;
&lt;p&gt;This will always used the user&#39;s preferred date format, covert it to the standard yyyy-mm-dd, and works with the keyboard... also, it&#39;s one line of code that works with dark mode by default.&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;Related&lt;/em&gt;:&lt;/h2&gt;
&lt;p&gt;Real links!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://susam.net/do-not-roll-your-own.html&quot;&gt;https://susam.net/do-not-roll-your-own.html&lt;/a&gt;: Don&#39;t Roll Your Own ...&lt;/li&gt;
&lt;li&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://maurycyz.com/misc/13kb/&quot;&gt;/misc/13kb/&lt;/a&gt;: Why using a single big page can actually improve performance.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded>
    <category>news</category>
    <category>web</category>
  </item>
</channel>
</rss>
