my php website :D https://j0.lol
1<p>
2 I think — at least for me — that blogging is a form of journaling. I feel
3 like if I was journaling physically<a ref="physicalnotetaking"></a> I would
4 love to take care of a physical <em>tome</em> containing my thoughts.
5 Decorate it, take care of it, et cetera. Following this logic, I take great
6 joy in taking care of my website. Polishing the CSS, adding nice features,
7 making a nice favicon<a ref="favicon"></a>, and other stuff (sorry I have
8 been working on it a lot recently.) So, uh, I think I want to just gush
9 about all the changes I have made recently to my site, and maybe circle back
10 to some deeper point about self-love.
11</p>
12
13<figure>
14 <img
15 loading="lazy"
16 width="1302"
17 height="1310"
18 src="https://vps.j0.lol/website-assets/lotsofcommits.png"
19 />
20 <figcaption>Lots of commits.</figcaption>
21</figure>
22
23<h2>Favicons are weird</h2>
24
25<p>I have many questions about favicons.</p>
26<ul>
27 <li>
28 Why are they called favicons?<a ref="whyfavicon"></a> Favorite icons?
29 Shouldn't they be called like bookmark<a ref="bookmarksaside"></a> icons
30 or something? Did they make this up in like Netscape Navigator or
31 Internet Explorer or something?<a ref="ie"></a>
32 </li>
33 <li>
34 Why are they so small? It's really hard to represent anything in a
35 16×16 square. At least we can now use 32×32, and people who
36 know their way around a vector design program can use an SVG.
37 </li>
38 <li>
39 How have we not come up with a better way of linking an icon to your
40 website than stuffing a bunch of
41 <code><link></code> tags in your <code><head></code
42 ><a ref="googwebmanifest"></a>??
43 </li>
44</ul>
45
46<p>
47 Um. Sorry about all the footnotes. When I started working on my current
48 iteration of my site, which I arbitrarily named V4, I was getting into
49 drawing at the same time. I wasn't sure what to fit in that thing, so I just
50 put the drawing I had in there. It uh. It looked bad. Here's a recreation:
51 <img
52 loading="lazy"
53 class="raw"
54 src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAADHbxzxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACs0lEQVQ4EaWTXW8bRRSGn5nd9cf6Mx/YaWMcYzdpSgMSVXvRilvEBT8B/h//AVVcVOICVUXqh8BpWkibOFBqU3d3vbbX3h3OOAqEa87srvbMzPvOOzPvUd3ObcP/CPcyVkmileaCMTMZSppW6j99lzH/ENiJqQCCdIK2MGEra5+lWRKm8xUR8i05+ct4VgQX4Eouz43yDot0yXKpeBYe0fDW2at2MU4CRvHi/Yks4KxIjOjSFmyZI95Ry1q8eeVz/JuL79S4vfExV0rrRBPFr4ce7/+osuZsMidmYdKVKrWzc8s4OqXjfkqrHbLfe0s8c3jwk8/irCWLGm7eiuh9dEqaNHn4JMePv7/kw0qFs9kQ18qupW163YQv7ymm6YwNGdxvO4zeBeAEbNYXK5Wb1ZjWVsTrbxtcKa5T89bQe9U9zKTEzd0Yz/Fp1DPORiF/TU4Zxs9EwRlaj4RkxuvhgOnM46u7dU4HKQkT3EF8Qj7XIY426Q/6hLEjk7WQyTYeF/j8wDCdG34+VmxUS1QKOd78WWScO2IUj9BH0YDEH3D/hyVatrLdiCjmFPcfKb75wtDdhuHYodUMKOVrPDqc8Ph5wP4HTaKFHKR14l5ll+fhIT3uoKpDvjt5CgLKN1zmsjrjGfdudClkG3x//Ire9oTrpQN+Cfu4qVxH2StTcauc8JDPcnf5eneL0fwtwTzC1ZrmtSYFXeYo6NO+OqbrH1D0isyzBepq+xPTK3VoFrdEUkSSJoSLEN/zBVSU0zcEi4BlllLP1ym6BTGSph8cyo1NUb3OHTPN5rhSAwVdYJbNxL7pytYp2cpxnnJXdrN1UlB5xmlISchd5eBaO/oCzKQlWYKnPHLyWncqWxASRmrE5laNULPmVsiMRZrzWrBgO+wI43m3JPJnn3/jPLHybdFdxN8uVB7pghou7AAAAABJRU5ErkJggg=="
55 width="16"
56 height="16"
57 style="vertical-align: top"
58 />
59 . Ew, right? So a few months ago I made this new drawing, the dialog box
60 deer that you have definitely seen on this site already. And I realised that
61 I can adapt it into a favicon:
62 <img
63 loading="lazy"
64 class="raw"
65 src="/static/favicon.ico"
66 width="32"
67 height="32"
68 style="width: 16px; height: 16px; vertical-align: top"
69 />. Much clearer, right? Just bicubic scaling the image down makes it quite
70 readable, which I was honestly shocked at.
71</p>
72
73<h2 id="fonts">Changing fonts</h2>
74
75<figure>
76 <img
77 loading="lazy"
78 width="1448"
79 height="288"
80 src="https://vps.j0.lol/website-assets/lovingyourwebsite/oldfont.png"
81 alt="Screenshot of my blog, with an old rounded monospace heading font."
82 />
83 <figcaption>My old heading font</figcaption>
84</figure>
85
86<figure>
87 <img
88 loading="lazy"
89 width="1452"
90 height="192"
91 src="https://vps.j0.lol/website-assets/lovingyourwebsite/newfont.png"
92 alt="Screenshot of my blog, with an new rounded serif heading font."
93 />
94 <figcaption>My new heading font</figcaption>
95</figure>
96
97<p>
98 I'm a programmer first, not a writer. So when I was making my website, it
99 just made sense to add a touch of monospace to it. I imported my terminal
100 font <em style="font-family: var(--font-mono)">(Maple Mono)</em> into my
101 project and set it as a heading font, italicized with cursive symbols.
102 Though I was getting kind of tired of it. I don't think monospace fonts look
103 that good when at such a large size. So I found this new font on Google
104 Fonts (where else?) called
105 <em style="font-family: var(--font-serif)">Hepta Slab</em> and fell in love
106 with it immediately. It's still very round, which captures the sort of look
107 the rest of my fonts have (the sans-serif font is <em>DM Sans</em>) while
108 feeling way more in place than a monospaced font.
109</p>
110
111<p>
112 I think people all have complex relationship with fonts. Though maybe that's
113 just my autism speaking. People hate
114 <em style="font-family: "Comic Sans MS"">Comic Sans</em>. People
115 love to write Word documents with
116 <em style="font-family: Arial, Helvetica, sans-serif">Arial</em>. Web
117 developers love <em style="font-family: Inter, sans-serif">Inter</em>.
118 Everyone sort of has their own font, in their
119 <span class="shantell">handwriting</span><a ref="shantell"></a>. You might
120 feel comforted by a <span class="monospace">monospace</span> font.
121 <span class="cursive">Cursive</span>
122 might remind you of rigid school structures.
123</p>
124
125<?php speech_start(SpeechCharacter::Deer, SpeechEmotion::Happy); ?>
126<p>In other words, fonts are highly personal.</p>
127<?php speech_end(); ?> <?php speech_start(SpeechCharacter::Deer,
128SpeechEmotion::Shocked); ?>
129<p>
130 Where did I get the idea to use
131 <span style="font-family: var(--font-serif)">serif</span> for headings?
132 Honestly I'm not sure. I've seen it in a few places, like
133 <a href="https://highlysuspect.agency/">Quat's blog</a> and
134 <a href="https://zed.dev/docs/">the Zed website</a>.
135 <a
136 href="https://www.smashingmagazine.com/2010/11/best-practices-of-combining-typefaces/"
137 >Smashing Magazine</a
138 >
139 has writing on this from 2010(!) so it's clearly not a new practice.
140</p>
141<?php speech_end(); ?>
142
143<h2>Physicality</h2>
144
145<div class="hstack">
146 <figure style="background: #1c1829">
147 <img
148 loading="lazy"
149 width="1064"
150 height="1298"
151 src="https://vps.j0.lol/website-assets/lovingyourwebsite/nophysicality.png"
152 alt="Screenshot of my website's home page. The 'page' is very bare."
153 />
154 <figcaption>The home page is floating on a background.</figcaption>
155 </figure>
156
157 <figure style="background: #1c1829; justify-content: space-between">
158 <img
159 loading="lazy"
160 width="1064"
161 height="1110"
162 src="https://vps.j0.lol/website-assets/lovingyourwebsite/yesphysicality.png"
163 alt="Screenshot of my website's home page. The 'page' feels a lot more grounded, with borders and a shadow."
164 />
165 <figcaption>The page has a nice border and a shadow now.</figcaption>
166 </figure>
167</div>
168
169<p>
170 As someone with autism, I have a divine fixation with tactile things. Shapes
171 feel nice. During this redesign, I've been trying to add physicality
172 wherever possible. This isn't <em>just</em> because of Apple's
173 <em>Liquid Glass</em> design language, but I think flat design is boring
174 generally. I think many people do??
175</p>
176
177<p>
178 I've been adding physicality wherever possible. The figures now have a
179 shadow and border. Well, I haven't really been able to add it anywhere else,
180 due to some rigid CSS limitations. I'll figure it out eventually. I hope
181 this looks good!
182</p>
183
184<h2>Cute little icons</h2>
185
186<div class="hstack">
187 <figure style="background: #08070f">
188 <img
189 loading="lazy"
190 width="770"
191 height="244"
192 src="https://vps.j0.lol/website-assets/lovingyourwebsite/oldindex.png"
193 alt="Screenshot of old post index. Arrows are used for date."
194 />
195 <figcaption>Old arrow icons.</figcaption>
196 </figure>
197
198 <figure style="background: #08070f">
199 <img
200 loading="lazy"
201 width="744"
202 height="226"
203 src="https://vps.j0.lol/website-assets/lovingyourwebsite/newindex.png"
204 alt="Screenshot of old post index. Clock icons are used for date."
205 />
206 <figcaption>New, nice clock icons.</figcaption>
207 </figure>
208</div>
209
210<div class="hstack">
211 <figure style="background: #08070f; justify-content: space-between">
212 <img
213 loading="lazy"
214 width="1386"
215 height="966"
216 src="https://vps.j0.lol/website-assets/lovingyourwebsite/oldbsky.png"
217 alt="Screenshot of old comment section"
218 />
219 <figcaption>
220 Old comment section. Uses text for reply and like labels.
221 </figcaption>
222 </figure>
223
224 <figure style="background: #08070f">
225 <img
226 loading="lazy"
227 width="1412"
228 height="988"
229 src="https://vps.j0.lol/website-assets/lovingyourwebsite/newbsky.png"
230 alt="Screenshot of new comment section"
231 />
232 <figcaption>
233 New comment section. Lots of icons, and a <em>LOT</em> of tweaking
234 to get things feeling better.*
235 </figcaption>
236 </figure>
237</div>
238<span
239 ><small
240 >* Note that the comment lines are very thin, and you might have to
241 zoom in to see them.</small
242 ></span
243>
244<p>
245 I found a new icon library: <a href="https://css.gg">CSS.gg</a>. They serve
246 very simple SVG icons you can just throw in your source. These have been
247 sprinkled around where necessary.
248</p>
249
250<h2>Code Blocks and Highlighting</h2>
251
252<pre><code class="language-rust">
253fn main() {
254 println!("Here's a code block!");
255
256 // Explode
257 unsafe { unreachable_unchecked!() }
258}
259</code></pre>
260
261<p>
262 I'm currently using <a href="https://prismjs.com/">Prism.js</a> for code
263 highlighting. It's widely supported, has good theming, and a heck of a lot
264 of language support. Um. The only issue is that it doesn't really make sense
265 in <samp>$CURRENT_YEAR</samp>. Since the advent of
266 <a href="https://tree-sitter.github.io/tree-sitter/">tree-sitter</a>, code
267 highlighting is done via syntax trees instead of regex parsing. It's faster,
268 and makes more sense. However: tree-sitter is written in a compiled
269 language. This makes it a pain to run in the browser
270 <a ref="highlightssr"></a>... There's web bindings via wasm
271 <a href="https://www.npmjs.com/package/web-tree-sitter">on npm</a>, but it
272 would need a bit of work to use to highlight. Plus, I'm sort of worried
273 about the size of WASM blobs. Each language requires its own blob, so I
274 could be pulling in several wasm blobs on every site. Prism.js is (at time
275 of writing, on this site)
276 <math>
277 <mrow>
278 <mn>74.4</mn>
279 <mi>kB</mi>
280 </mrow>
281 <mtext><sub>JS</sub></mtext>
282 <mo>+</mo>
283 <mrow>
284 <mn>1.4</mn>
285 <mi>kB</mi>
286 </mrow>
287 <mtext><sub>CSS</sub></mtext>
288 </math>
289 big. As a test, I pulled in tree-sitter JS, WASM and the Javascript WASM
290 blob. That alone (without any highlighting code or anything!) is
291 <math>
292 <mrow>
293 <mn>152</mn>
294 <mi>kB</mi>
295 </mrow>
296 <mtext><sub>JS</sub></mtext>
297 <mo>+</mo>
298 <mrow>
299 <mn>206</mn>
300 <mi>kB</mi>
301 </mrow>
302 <mtext><sub>WASM</sub></mtext>
303 <mo>+</mo>
304 <mrow>
305 <mn>359</mn>
306 <mi>kB</mi>
307 </mrow>
308 <mtext><sub>WASM js grammar</sub></mtext> </math
309 >. Yipes!
310</p>
311
312<p>
313 So this is why I'm using Prism. There are other regex-based highlighters,
314 but this one works fine. One thing I added recently is the little language
315 tag, which makes it more obvious which language is in the code block. I
316 added it for my blog post where I talk about Swift in comparison to Rust.
317</p>
318
319<h2>About footnotes</h2>
320
321<p>
322 Umm. I like tangents. You might notice the large footnotes section on this
323 article. This was pretty fun to implement! If you've used markdown, and not
324 really thought about writing in HTML, you might assume that footnotes are a
325 HTML primitive. Nah! My current implementation looks like this:
326</p>
327
328<pre><code class="language-html"><!--
329<p>
330 This is a paragraph <a ref="umm_actually"></a>.
331</p>
332
333<footer>
334 <h2 id="notes_heading">Footnotes</h2>
335 <ol>
336 <li id="note_umm_actually">
337 Well, there's not really much text there. Its a sentence.
338 Should it really even be put in a p tag?
339 It's kind of semantically wrong.
340 </li>
341 </ol>
342</footer>
343--></code></pre>
344
345<p>
346 A <a href="/static/js/footnotes.js">script</a> comes along and fills out
347 everything to be <em>semantically correct</em> HTML. It's based on this
348 <a href="https://www.niquette.ca/articles/accessible-footnotes/"
349 >great article about making footnotes accessible</a
350 >, but I tweaked it a bit to remove markup boilerplate. Note that the
351 <code><a></code> tag uses <code>ref</code>, not <code>href</code>. Not
352 sure if this attribute is used in other places, but I thought it would be
353 fine to use here. (It gets stripped by the script and replaced with a
354 <code>href</code>.)
355</p>
356
357<p>
358 One fun issue I found is that the "return" ↩ symbol looks different
359 depending on browser. Mobile browsers (at least mine) will make it an emoji,
360 while desktop browsers will use a normal font. You can choose this behaviour
361 by suffixing a unicode character:
362</p>
363
364<style>
365 table {
366 margin: 0 auto;
367 border-collapse: collapse;
368 border: 1px solid var(--border);
369 }
370
371 th,
372 td {
373 padding: 0.2rem;
374 border: 1px solid var(--border);
375 }
376</style>
377
378<figure>
379 <table>
380 <tr>
381 <th>Default</th>
382 <td>↩</td>
383 <td>⛄</td>
384 </tr>
385 <tr>
386 <th>Variation Selector 15 <code>&#xfe0e;</code></th>
387 <td>↩︎</td>
388 <td>⛄︎</td>
389 </tr>
390
391 <tr>
392 <th>Variation Selector 16 <code>&#xfe0f;</code></th>
393
394 <td>↩️</td>
395 <td>⛄️</td>
396 </tr>
397 </table>
398 <figcaption>
399 Weirdly, on Chrome macOS it always picks the snowman emoji.
400 </figcaption>
401</figure>
402
403<h2>Aside on writing in HTML</h2>
404
405<p>
406 I think HTML might be the most expressive way to write. You can express
407 almost anything (see the <a href="#fonts">fonts section</a> :p) and it
408 doesn't have the same issues that other markup formats have with wordiness
409 (if you think HTML is bad, see
410 <math>
411 <mrow>
412 <mtext>L</mtext>
413 <mrow style="margin-left: -0.35em"></mrow>
414 <mpadded voffset="0.2em" style="padding: 0.2em 0 0 0">
415 <mstyle scriptlevel="0" displaystyle="false">
416 <mstyle scriptlevel="1" displaystyle="false">
417 <mtext>A</mtext>
418 </mstyle>
419 </mstyle>
420 </mpadded>
421 <mrow style="margin-left: -0.15em"></mrow>
422 <mtext>T</mtext>
423 <mrow style="margin-left: -0.1667em"></mrow>
424 <mpadded voffset="-0.2155em" style="padding: 0 0 0.2155em 0">
425 <mstyle scriptlevel="0" displaystyle="false">
426 <mtext>E</mtext>
427 </mstyle>
428 </mpadded>
429 <mrow style="margin-left: -0.125em"></mrow>
430 <mtext>X</mtext>
431 </mrow> </math
432 >.) I see most bloggers using markdown and I wonder: why? It makes
433 everything harder. If you want to have a "component", you basically have to
434 <a href="https://mdxjs.com/">extend markdown</a>, then have a framework or
435 preprocessor to convert into HTML. You can put HTML in markdown (sometimes),
436 but the syntax is very odd. Either way, it's gross.
437</p>
438
439<p>
440 I think people are scared of HTML. It's not that hard to write, and you can
441 use <a href="https://emmet.io/">Emmet</a> to write a lot of HTML from very
442 understandable abbreviations if you have worked with CSS.
443 <code>footer>h2#notes_heading+ol>li*3</code> produces an entire footnotes
444 section from earlier, and it lets you use tab to jump between text fields to
445 fill.
446</p>
447
448<p>
449 You also lose a lot of
450 <a href="https://developer.mozilla.org/en-US/docs/Glossary/Semantics"
451 >semantic information</a
452 >
453 with markdown. You could represent a
454 <code>figure>img+figcaption</code>
455 like this:
456</p>
457<pre><code class="language-md">
458 
459 This is an image.
460</code></pre>
461
462<p>
463 But what happens when you want to style a figure? If you want to center the
464 caption, frame the image, add a <code>::before</code> pseudo-element with a
465 counter, etc. What will a screen reader do when it comes across your figure?
466 Not what you want it to do!
467</p>
468
469<p>
470 So it's either restrictive, ugly, or heavy. Um, maybe that was convincing. I
471 think using HTML thoughtfully like this makes you better at using HTML
472 thoughtfully elsewhere. When writing in HTML, go to
473 <a
474 href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements"
475 >MDN</a
476 >
477 and think: "Is there an element for this?" By doing this, you'll learn about
478 new tags like <code><samp></code> for quoting output from a program,
479 <code><abbr></code> for acronyms or abbreviations, all of MathML,
480 <code><ruby></code> for displaying
481 <ruby
482 >pronounciation<rp>(</rp>
483 <rt>pro-noun-si-a-tion</rt>
484 <rp>)</rp> </ruby
485 >. It's fun :)
486</p>
487
488<h2>Trying to conclude this post</h2>
489
490<p>
491 I've had a lot of fun writing this post, as well as working on my website.
492 HTML+CSS is one of the most expressive technologies we have in software
493 development. Working on your personal website is, I think, a form of self
494 love. It's a construct built for the express purpose of self-expression.
495 Express yourself!
496</p>
497
498<?php speech_start(SpeechCharacter::Deer, SpeechEmotion::Happy); ?>
499<p>
500 I see you've made it to the end. Thanks for sticking with me here, this is
501 probably the longest blog post I have made yet. If you want to see more of
502 my posts when they come out, <a href="/feed">subscribe to my RSS feed</a>!
503 Due to how RSS is designed, I have literally no idea how many people are
504 subscribed. But that's kind of fun!
505</p>
506<?php speech_end(); ?>
507
508<!-- end -->
509<footer>
510 <h2 id="notes_heading">Footnotes</h2>
511 <ol>
512 <li id="note_physicalnotetaking">
513 I've tried journaling physically before. I just really struggle with
514 it. I think my hands aren't up to the task? They are very weak. I've
515 always struggled with it. I'm left handed and I don't think I was
516 ever raised to write properly? Maybe it's some deeper problem
517 though. Oh well.
518 </li>
519 <li id="note_favicon">
520 Did you know that Safari is really <em>really</em> annoying about
521 favicon caching? Details are
522 <a
523 href="https://www.leereamsnyder.com/favicons-in-2021#clearing-the-icon-cache-in-macos-safari-is-deeply-unpleasant"
524 >here</a
525 >, but it really sucks. If you're trying to work on your favicon,
526 see
527 <a
528 href="https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs"
529 >this great article</a
530 >
531 about it, highlighted to me by one of my most favorite websites:
532 <a href="https://css-tricks.com/how-to-favicon-in-2021/"
533 >CSS-Tricks</a
534 >.
535 </li>
536 <li id="note_whyfavicon">
537 Because they helped differentiate URLS in your... favorites. They
538 are called favorites instead of bookmarks because Microsoft said so.
539 </li>
540
541 <li id="note_bookmarksaside">
542 Aside: I really don't use bookmarks. Maybe this really dates me as a
543 member of Generation Z, but it's almost always a lot easier to just
544 let the powerful browser autofill <samp>b</samp> into
545 <samp>bsky.app</samp> for me. And the bookmarks toolbar is such a
546 waste of space! If I don't have the URL saved in the browser for
547 whatever reason, searching into Kagi will almost always give me what
548 I want.
549 </li>
550 <li id="note_ie">
551 They were introduced in IE5. Makes sense why they use the very
552 Windows <samp>.ico</samp> format then.
553 </li>
554
555 <li id="note_googwebmanifest">
556 Google actually tried. When they introduced Progressive Web Apps,
557 they made a new Web Manifest that you can stuff (Android) icons into
558 instead of the head. Here's what that looks like:
559 <pre><code class="language-json">
560 {
561 "icons": [
562 { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" },
563 { "src": "/icon-mask.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable" },
564 { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" }
565 ]
566 }</code></pre>
567
568 It would be nice if we could standardise on this for favicons or
569 whatever. But everything has been set in stone, I guess.
570 </li>
571
572 <li id="note_shantell" class="shantell">
573 Shantell Sans has a really lovely story. You can
574 <a href="https://shantellsans.com/process">read it here</a>.
575 </li>
576
577 <li id="note_highlightssr">
578 You may be asking: Why don't you just render it serverside? A few
579 reasons:
580 <ul style="margin-block-end: 0.5rem">
581 <li>
582 My website is in PHP, not a compiled language like Rust.
583 </li>
584 <li>
585 I did this <a href="/blog/php-site">before</a>, and made an
586 impossible-to-maintain PHP extension that sucks.
587 </li>
588 <li>
589 Even if I did this, I'm moving the highlighting computation
590 time onto the "load bearing" HTML step instead of loading
591 after the rest of the page is loaded.
592 </li>
593 <li>
594 Like, I'm not caching my pages (because PHP) so every page
595 gets rendered on every request. If I was making a static
596 site generator this would make a lot more sense. But I'm not
597 really interested in re-architecting my entire website for
598 this purpose (yet...)
599 </li>
600 </ul>
601 So, I'm choosing to stick with client-side highlighting.
602 </li>
603 </ol>
604</footer>
605
606<style>
607 @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Playwrite+GB+S+Guides:ital@0;1&family=Shantell+Sans:ital,wght@0,300..800;1,300..800&display=swap");
608
609 .monospace {
610 font-family: "Courier New", Courier, monospace;
611 }
612
613 .cursive {
614 font-family: "Playwrite GB S Guides", cursive;
615 font-weight: 400;
616 font-style: normal;
617 }
618
619 .shantell {
620 font-family: "Shantell Sans", cursive;
621 font-optical-sizing: auto;
622 font-weight: 400;
623 font-style: normal;
624 font-variation-settings:
625 "BNCE" 0,
626 "INFM" 0,
627 "SPAC" 0;
628 }
629
630 .hstack {
631 display: flex;
632 flex-direction: row;
633 width: 100%;
634 gap: 0.5rem;
635 justify-content: center;
636
637 > * {
638 margin-left: 0;
639 margin-right: 0;
640 }
641 }
642</style>