<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>theFileSystem</title><description>A CS student&apos;s notes on writing code, learning systems, and post-mortems on decisions that seemed smart at the time.</description><link>https://multiterm.stelclementine.com</link><item><title>Showing Off Blog Features</title><link>https://multiterm.stelclementine.com/posts/showing-off-blog-features</link><guid isPermaLink="true">https://multiterm.stelclementine.com/posts/showing-off-blog-features</guid><pubDate>Sun, 20 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Since the post does not have a description in the frontmatter, the first paragraph is used.&lt;/p&gt;
&lt;h2&gt;Theming&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Use your favorite editor theme for your blog!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Theming for the website comes from builtin Shiki themes found in Expressive Code. You can view them &lt;a href=&quot;https://expressive-code.com/guides/themes/#available-themes&quot;&gt;here&lt;/a&gt;. A website can have one or more themes, defined in &lt;code&gt;src/site.config.ts&lt;/code&gt;. There are three theming modes to choose from:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;single&lt;/code&gt;: Choose a single theme for the website. Simple.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;light-dark-auto&lt;/code&gt;: Choose two themes for the website to use for light and dark mode. The header will include a button for toggling between light/dark/auto. For example, you could choose &lt;code&gt;github-dark&lt;/code&gt; and &lt;code&gt;github-light&lt;/code&gt; with a default of &lt;code&gt;&quot;auto&quot;&lt;/code&gt; and the user&apos;s experience will match their operating system theme straight away.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;select&lt;/code&gt;: Choose two or more themes for the website and include a button in the header to change between any of these themes. You could include as many Shiki themes from Expressive Code as you like. Allow users to find their favorite theme!&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;When the user changes the theme, their preference is stored in &lt;code&gt;localStorage&lt;/code&gt; to persist across page navigation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Code Blocks&lt;/h2&gt;
&lt;p&gt;Let&apos;s look at some code block styles:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def hello_world():
    print(&quot;Hello, world!&quot;)

hello_world()
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;def hello_world():
    print(&quot;Hello, world!&quot;)

hello_world()
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;python hello.py
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also some inline code: &lt;code&gt;1 + 2 = 3&lt;/code&gt;. Or maybe even &lt;code&gt;(= (+ 1 2) 3)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&quot;https://expressive-code.com/key-features/syntax-highlighting/&quot;&gt;Expressive Code Docs&lt;/a&gt; for more information on available features like wrapping text, line highlighting, diffs, etc.&lt;/p&gt;
&lt;h2&gt;Basic Markdown Elements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;List item 1&lt;/li&gt;
&lt;li&gt;List item 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bold text&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Italic text&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;Strikethrough text&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.example.com&quot;&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In life, as in art, some endings are bittersweet. Especially when it comes to love. Sometimes fate throws two lovers together only to rip them apart. Sometimes the hero finally makes the right choice but the timing is all wrong. And, as they say, timing is everything.&lt;/p&gt;
&lt;p&gt;- Gossip Girl&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Age&lt;/th&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alice&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bob&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Los Angeles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charlie&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;Chicago&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;Images&lt;/h2&gt;
&lt;p&gt;Images can include a title string after the URL to render as a &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; with a &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./PixelatedGreenTreeSide.png&quot; alt=&quot;Pixel art of a tree&quot; title=&quot;Pixel art renders poorly without proper CSS&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![Pixel art of a tree](./PixelatedGreenTreeSide.png &apos;Pixel art renders poorly without proper CSS&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&apos;ve also added a special tag for pixel art that adds the correct CSS to render properly. Just add &lt;code&gt;#pixelated&lt;/code&gt; to the very end of the alt string.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./PixelatedGreenTreeSide.png&quot; alt=&quot;Pixel art of a tree #pixelated&quot; title=&quot;But adding #pixelated to the end of the alt string fixes this&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;![Pixel art of a tree #pixelated](./PixelatedGreenTreeSide.png &apos;But adding #pixelated to the end of the alt string fixes this&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Admonitions&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;:::note
testing123
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::note
testing123
:::&lt;/p&gt;
&lt;p&gt;:::tip
testing123
:::&lt;/p&gt;
&lt;p&gt;:::important
testing123
:::&lt;/p&gt;
&lt;p&gt;:::caution
testing123
:::&lt;/p&gt;
&lt;p&gt;:::warning
testing123
:::&lt;/p&gt;
&lt;h2&gt;Character Chats&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;:::duck
**Did you know?** You can easily create custom character chats for your blog with MultiTerm!
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::duck
&lt;strong&gt;Did you know?&lt;/strong&gt; You can easily create custom character chats for your blog with MultiTerm!
:::&lt;/p&gt;
&lt;h3&gt;Adding Your Own&lt;/h3&gt;
&lt;p&gt;To add your own character, first add an image file to the top-level &lt;code&gt;/public&lt;/code&gt; directory in your cloned MultiTerm repo. Astro cannot automatically optimize image assets from markdown plugins, so make sure to compress the image to a web-friendly size (&amp;lt;100kb).&lt;/p&gt;
&lt;p&gt;I recommend Google&apos;s free &lt;a href=&quot;https://squoosh.app&quot;&gt;Squoosh&lt;/a&gt; web app for creating super small webp files. The characters here have been resized to 300 pixels wide and exported to webp with 75% quality using Squoosh.&lt;/p&gt;
&lt;p&gt;After you&apos;ve added your image, update the &lt;code&gt;characters&lt;/code&gt; option in &lt;code&gt;site.config.ts&lt;/code&gt; with your newly added image file and restart the development server.&lt;/p&gt;
&lt;h3&gt;Character Conversations&lt;/h3&gt;
&lt;p&gt;When there are multiple character chats in a row, the order of the chat image and chat bubble reverses to give the chat more of a back-and-forth appearance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::owl
This is a cool feature!
:::

:::unicorn
I agree!
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::owl
This is a cool feature!
:::&lt;/p&gt;
&lt;p&gt;:::unicorn
I agree!
:::&lt;/p&gt;
&lt;p&gt;You can specify the alignment (&lt;code&gt;left&lt;/code&gt; or &lt;code&gt;right&lt;/code&gt;) to override the default &lt;code&gt;left, right, left, ...&lt;/code&gt; ordering.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::unicorn{align=&quot;right&quot;}
Over here, to the right!
:::
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::unicorn{align=&quot;right&quot;}
Over here, to the right!
:::&lt;/p&gt;
&lt;h2&gt;GitHub Cards&lt;/h2&gt;
&lt;p&gt;GitHub overview cards heavily inspired by &lt;a href=&quot;https://github.com/chrismwilliams/astro-theme-cactus&quot;&gt;Astro Cactus&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{repo=&quot;stelcodes/multiterm-astro&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;::github{repo=&quot;stelcodes/multiterm-astro&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;::github{user=&quot;withastro&quot;}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;::github{user=&quot;withastro&quot;}&lt;/p&gt;
&lt;h2&gt;Emoji :star_struck:&lt;/h2&gt;
&lt;p&gt;Emojis can be added in markdown by including a literal emoji character or a GitHub shortcode. You can browse an unofficial database &lt;a href=&quot;https://emojibase.dev/emojis?shortcodePresets=github&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Good morning! :sleeping: :coffee: :pancakes:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Good morning! :sleeping: :coffee: :pancakes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;All emojis (both literal and shortcoded) are made more accessible by wrapping them in a &lt;code&gt;span&lt;/code&gt; tag like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;span role=&quot;img&quot; aria-label=&quot;coffee&quot;&amp;gt;☕️&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the time of writing, &lt;a href=&quot;https://emojipedia.org/emoji-16.0&quot;&gt;emoji v16&lt;/a&gt; is not supported yet. These emojis can be included literally but they do not have shortcodes and will not be wrapped.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;LaTeX/KaTeX Math Support&lt;/h2&gt;
&lt;p&gt;You can also display inline math via &lt;a href=&quot;https://github.com/remarkjs/remark-math&quot;&gt;remark-math and rehype-katex&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Make those equations pretty! $ \frac{a}{b} \cdot b = a $
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make those equations pretty! $ \frac{a}{b} \cdot b = a $&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://katex.org/docs/supported&quot;&gt;KaTeX docs&lt;/a&gt; to learn about the syntax.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$$
a + ar + ar^2 + ar^3 + \dots + ar^{n-1} = \displaystyle\sum_{k=0}^{n - 1}ar^k = a \bigg(\dfrac{1 - r^n}{1 -r}\bigg)
$$
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;$$
a + ar + ar^2 + ar^3 + \dots + ar^{n-1} = \displaystyle\sum_{k=0}^{n - 1}ar^k = a \bigg(\dfrac{1 - r^n}{1 -r}\bigg)
$$&lt;/p&gt;
&lt;h2&gt;HTML Elements&lt;/h2&gt;
&lt;p&gt;&amp;lt;button&amp;gt;A Button&amp;lt;/button&amp;gt;&lt;/p&gt;
&lt;h3&gt;Fieldset with Inputs&lt;/h3&gt;
&lt;p&gt;&amp;lt;fieldset&amp;gt;
&amp;lt;input type=&quot;text&quot; placeholder=&quot;Type something&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;number&quot; placeholder=&quot;Insert number&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;text&quot; value=&quot;Input value&quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;select&amp;gt;
&amp;lt;option value=&quot;1&quot;&amp;gt;Option 1&amp;lt;/option&amp;gt;
&amp;lt;option value=&quot;2&quot;&amp;gt;Option 2&amp;lt;/option&amp;gt;
&amp;lt;option value=&quot;3&quot;&amp;gt;Option 3&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;textarea placeholder=&quot;Insert a comment...&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;label&amp;gt;&amp;lt;input type=&quot;checkbox&quot;&amp;gt; I understand&amp;lt;br&amp;gt;&amp;lt;/label&amp;gt;
&amp;lt;button type=&quot;submi&quot;&amp;gt;Submit&amp;lt;/button&amp;gt;
&amp;lt;/fieldset&amp;gt;&lt;/p&gt;
&lt;h3&gt;Form with Labels&lt;/h3&gt;
&lt;p&gt;&amp;lt;form&amp;gt;
&amp;lt;label&amp;gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;fruit&quot; value=&quot;apple&quot;&amp;gt;
Apple
&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;label&amp;gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;fruit&quot; value=&quot;banana&quot;&amp;gt;
Banana
&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;label&amp;gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;fruit&quot; value=&quot;orange&quot;&amp;gt;
Orange
&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;label&amp;gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;fruit&quot; value=&quot;grape&quot;&amp;gt;
Grape
&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;label&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; name=&quot;terms&quot; value=&quot;agree&quot;&amp;gt;
I agree to the terms and conditions
&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
</content:encoded><author>Colin Venancio</author></item><item><title>Showing Off Blog Features</title><link>https://multiterm.stelclementine.com/posts/my-first-post</link><guid isPermaLink="true">https://multiterm.stelclementine.com/posts/my-first-post</guid><pubDate>Sun, 20 Jul 2025 00:00:00 GMT</pubDate><content:encoded/><author>Colin Venancio</author></item></channel></rss>