<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Frontend on Joe Bylund</title><link>http://jbylund.github.io/tags/frontend/</link><description>Recent content in Frontend on Joe Bylund</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Joe Bylund</copyright><lastBuildDate>Wed, 02 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://jbylund.github.io/tags/frontend/index.xml" rel="self" type="application/rss+xml"/><item><title>Mana Symbol Rendering: Regex + Map for 47× Speedup</title><link>http://jbylund.github.io/posts/00352_mana-symbol-rendering-regex/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>http://jbylund.github.io/posts/00352_mana-symbol-rendering-regex/</guid><description>Replacing a per-symbol replaceAll loop with a single regex pass and a Map lookup cut mana symbol conversion time by 47×. The mechanism, the benchmark, and a gotcha with stateful regex.</description></item><item><title>Why Mana Symbols Are a Custom Webfont, Not SVG Sprites</title><link>http://jbylund.github.io/posts/00320_fonts-and-mana-symbols/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>http://jbylund.github.io/posts/00320_fonts-and-mana-symbols/</guid><description>Rendering Magic&amp;rsquo;s mana symbols as a custom webfont: why a font beats SVG sprites or images, how subsetting drops a 200–300 KB file to under 40 KB, and the tradeoffs around font loading that the obvious approach misses.</description></item><item><title>Autocomplete Without a Round-Trip: Suggestions from a Frozen In-Memory Type List</title><link>http://jbylund.github.io/posts/00256_autocomplete-card-types/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><guid>http://jbylund.github.io/posts/00256_autocomplete-card-types/</guid><description>When you type t:cre, the search box completes it to t:Creature before any network request leaves your browser. The type list lives in a frozen in-memory index, populated once at page load from the Rust engine.</description></item><item><title>Progressive Enhancement: Two Card Renderers for the Price of One</title><link>http://jbylund.github.io/posts/00192_progressive-enhancement-no-js/</link><pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate><guid>http://jbylund.github.io/posts/00192_progressive-enhancement-no-js/</guid><description>/?q=fire always returns fully rendered HTML — no JavaScript required. JS layers typeahead and live updates on top. The cost: two card renderers that have to stay in sync.</description></item></channel></rss>