<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://thisisstellar.com/feed.042a2d0c305o.xsl" media="all"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ThisIsStellar</title>
    <description>Pages, notes, a podcast, and little interactive toons—all on my own domain.</description>
    <link>https://thisisstellar.com/</link>
    <language>en</language>
    <lastBuildDate>Fri, 2 Oct 2026 05:46:41 +0000</lastBuildDate>
    <atom:link href="https://thisisstellar.com/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Hello, stellar</title>
      <link>https://thisisstellar.com/notes/2026-09-18-hello-stellar</link>
      <guid isPermaLink="true">https://thisisstellar.com/notes/2026-09-18-hello-stellar</guid>
      <dc:creator>Ryan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 13:00:00 +0000</pubDate>
      <description>Hello, stellar</description>
      <content:encoded><![CDATA[<article class="h-entry">
    <div class="post-header">
        <h1 class="p-name">Hello, stellar</h1>
        <div class="post-meta">
            <a class="u-url" href="https://thisisstellar.com/notes/2026-09-18-hello-stellar">
                <time class="dt-published" datetime="2026-09-18T09:00:00-04:00">2026-09-18</time>
            </a>
        </div>
    </div>

    
    <p class="in-reply-to">↩ In reply to
        <a class="u-in-reply-to" href="https://mastodon.social/@someone/123456789">this post</a>
    </p>
    

    <div class="e-content">
        <p>First note on the new engine. The frontmatter for this post is validated
against the <code>Note</code> page-type schema at build time—including that
<code>in-reply-to</code> up there. If I typo a field name or skip <code>pubDate</code>, the build
fails and <code>ddc diagnostics</code> tells me exactly which file did it.</p>

    </div>

    
    
    

    
    <div class="webmentions" data-webmentions="https://thisisstellar.com/notes/2026-09-18-hello-stellar" hidden=""></div>
    

    
    <data class="p-author h-card" value="Ryan">
        <data class="p-name" value="Ryan"></data>
        <data class="u-url" value="https://thisisstellar.com"></data>
        
        <data class="u-photo" value="https://thisisstellar.com/images/avatar-96.jpg"></data>
    </data>
</article>]]></content:encoded>
    </item>
    <item>
      <title>Trailer: what this show is</title>
      <link>https://thisisstellar.com/podcast/ep-000-trailer</link>
      <guid isPermaLink="true">https://thisisstellar.com/podcast/ep-000-trailer</guid>
      <dc:creator>Ryan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 13:00:00 +0000</pubDate>
      <description>Ninety seconds on what ThisIsStellar the podcast will cover.</description>
      <content:encoded><![CDATA[<article class="h-entry">
    <div class="post-header">
        <h1 class="p-name">Trailer: what this show is</h1>
        <div class="post-meta">
            Episode 0 ·
            <a class="u-url" href="https://thisisstellar.com/podcast/ep-000-trailer">
                <time class="dt-published" datetime="2026-09-18T09:00:00-04:00">2026-09-18</time>
            </a>
             · 00:01:30
        </div>
        <p class="p-summary">Ninety seconds on what ThisIsStellar the podcast will cover.</p>
    </div>

    
    <p class="listen">
        <audio controls="" preload="none" src="https://audio.thisisstellar.com/audio/ep000-trailer.mp3"></audio>
        <a class="u-audio" href="https://audio.thisisstellar.com/audio/ep000-trailer.mp3">Download episode</a>
    </p>

    <div class="e-content">
        <p>Show notes for the trailer. The audio is a synthetic placeholder—a slow pad
rather than a voice—so the pipeline has something real to master before the
first episode is written. <code>scripts/podcast-encode.rs</code> produced it: two-pass
loudnorm to -16 LUFS and -1.5 dBTP, 128 kbps stereo, ID3v2.3 tags, chapters,
and an embedded cover. It then ran ffprobe over the result and wrote the
duration and byte count back into the frontmatter above, so the feed has
everything it needs from <code>content/</code> alone.</p>
<p>Note the <code>show = "podcast"</code> field: that's a typed <code>@link(@Show)</code> reference.
If it pointed at a page that isn't a <code>Show</code>, the build would fail.</p>

    </div>

    
    <div class="webmentions" data-webmentions="https://thisisstellar.com/podcast/ep-000-trailer" hidden=""></div>
    

    
    <data class="p-author h-card" value="Ryan">
        <data class="p-name" value="Ryan"></data>
        <data class="u-url" value="https://thisisstellar.com"></data>
        
        <data class="u-photo" value="https://thisisstellar.com/images/avatar-96.jpg"></data>
    </data>
</article>]]></content:encoded>
    </item>
    <item>
      <title>Hello, toon</title>
      <link>https://thisisstellar.com/animations/2026-09-18-hello-toon</link>
      <guid isPermaLink="true">https://thisisstellar.com/animations/2026-09-18-hello-toon</guid>
      <dc:creator>Ryan</dc:creator>
      <pubDate>Fri, 18 Sep 2026 13:00:00 +0000</pubDate>
      <description>The first ThisIsStellar sketch: a Rust starfield compiled to WebAssembly, drawn straight to a canvas.</description>
      <content:encoded><![CDATA[<article class="h-entry">
    <div class="post-header">
        <h1 class="p-name">Hello, toon</h1>
        <div class="post-meta">
            <a class="u-url" href="https://thisisstellar.com/animations/2026-09-18-hello-toon">
                <time class="dt-published" datetime="2026-09-18T09:00:00-04:00">2026-09-18</time>
            </a>
        </div>
        <p class="p-summary">The first ThisIsStellar sketch: a Rust starfield compiled to WebAssembly, drawn straight to a canvas.</p>
        
        
        <data class="u-featured" value="https://thisisstellar.com/images/hello-toon-poster.jpg"></data>
        
    </div>

    
    <div class="sketch-shell" data-sketch="hello-toon" style="background-image: url('/images/hello-toon-poster.jpg'); aspect-ratio: 800 / 450; max-width: 800px;">
        <button class="sketch-play" type="button">
            ▶ Load and play “Hello, toon”
        </button>
        <p class="sketch-status" hidden=""></p>
        <canvas class="sketch-canvas" hidden=""></canvas>
    </div>
    

    <div class="e-content">
        <p>A field of stars that twinkle, a comet on a slow ellipse, and a wordmark. No
game engine: it is Rust compiled to WebAssembly talking to a 2D canvas
through <code>wasm-bindgen</code> and <code>web-sys</code>, which makes it the smallest thing that
still exercises the whole pipeline.</p>
<p>The whole artifact is about 58 KB of WebAssembly, 25 KB of that over the
wire, plus 17 KB of glue. It streams in only when you press play, so a gallery
full of toons costs nothing until you ask for one.</p>
<p>Two things about the build are worth knowing. dodeca content-hashes every file
in <code>static/</code>, and <code>wasm-bindgen</code> resolves its own <code>.wasm</code> sibling through a
string literal that dodeca does not rewrite, so <code>scripts/sketch-manifest.rs</code>
publishes a small <code>manifest.json</code> mapping the original names to the hashed
ones; the embed shell reads that instead of guessing. And the shell unhides the
canvas before instantiating the module, because a hidden element has no layout,
and a sketch that measures itself at startup would size its canvas to nothing.</p>
<p>I wrote the sizing loop wrong the first time in a way worth recording: a
<code>&lt;canvas></code> with no CSS width of its own takes its layout size from its <code>width</code>
attribute, so measuring the canvas to set the canvas doubles the box every
frame until the tab runs out of memory. It measured the shell instead.</p>

    </div>

    

    
    <div class="webmentions" data-webmentions="https://thisisstellar.com/animations/2026-09-18-hello-toon" hidden=""></div>
    

    
    <data class="p-author h-card" value="Ryan">
        <data class="p-name" value="Ryan"></data>
        <data class="u-url" value="https://thisisstellar.com"></data>
        
        <data class="u-photo" value="https://thisisstellar.com/images/avatar-96.jpg"></data>
    </data>
</article>]]></content:encoded>
    </item>
  </channel>
</rss>