<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>aviraccoon's nocturnal scribbles</title>
        <link>https://raccoon.land/</link>
        <description>A raccoon's late-night thoughts on ADHD, game dev, dev tools, self-hosting, and whatever keeps me up at 2am.</description>
        <lastBuildDate>Fri, 15 May 2026 23:59:38 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <atom:link href="https://raccoon.land/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Thank You For Your Service]]></title>
            <link>https://raccoon.land/posts/thank-you-for-your-service/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/thank-you-for-your-service/</guid>
            <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[I made a game about a restaurant. It's not about a restaurant. Come (s)print and play it.]]></description>
            <content:encoded><![CDATA[<p>I left a job recently. Three years, give or take. A bunch of nights after, I was sitting at a bar thinking about how I&#39;d explain the whole thing to the person behind the counter. Not the version with tech words and terms I use at work - the version that would make sense to someone who works in a restaurant.</p>
<p>How the kitchen ran. Who got to change the menu. What happened when you proposed something, and what happened when someone else proposed the exact same thing without asking.</p>
<p><a href="/games/thank-you-for-your-service/"><img src="./thank-you-for-your-service.png" alt="Thank You For Your Service" loading="lazy"></a></p>
<p><a href="/games/thank-you-for-your-service/"><strong>Play it here.</strong></a></p>
<h3 id="why-a-receipt">Why a receipt <a href="#why-a-receipt" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>The whole game is one long receipt printing out of a thermal printer. You tap, the next line prints. There are choices sometimes.<sup><a id="footnote-ref-choices" href="#footnote-choices" data-footnote-ref data-tooltip="Play it and see if they do anything. Don&amp;#39;t blame the receipt printer, it&amp;#39;s just a messenger." aria-describedby="footnote-label">1</a></sup></p>
<p>Receipts are also just a really good format for this kind of story. They don&#39;t have opinions. They record transactions: what was given, what was received, how long it took, what it cost. The gap between the numbers on a receipt and the experience they represent is where the whole game lives.</p>
<h3 id="the-printer">The printer <a href="#the-printer" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>I wanted it to feel like a physical thing, not a web page with text on it. There&#39;s a CSS thermal printer at the bottom of your screen with a slot, a status light, and a little model number.<sup><a id="footnote-ref-model" href="#footnote-model" data-footnote-ref data-tooltip="A completely random model number, of course. I was tempted to use 69 in there but I&amp;#39;m a responsible raccoon." aria-describedby="footnote-label">2</a></sup> Paper feeds upward as you tap, with that jerky <code>steps()</code> CSS timing that thermal paper actually has. The sound is Web Audio API, a bandpass-filtered noise burst for the print head and a low-frequency rumble for the paper feed, both synthesized on the fly so there&#39;s no audio file to load.</p>
<p>When you open the game, the screen is empty. Just the printer sitting at the bottom in a dark void. Then only a small strip of paper appears. It grows as you tap, and when there&#39;s more paper than screen, it starts scrolling. Lines print one by one within each section, and if you get impatient you can tap again to skip to the end of the current block.<sup><a id="footnote-ref-skip" href="#footnote-skip" data-footnote-ref data-tooltip="But you wouldn&amp;#39;t do that, now would you?" aria-describedby="footnote-label">3</a></sup></p>
<p>I won&#39;t spoil what happens at the end, but the printer does something different. You&#39;ll know when it&#39;s over.</p>
<h3 id="what-i-wont-say">What I won&#39;t say <a href="#what-i-wont-say" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>If you&#39;ve worked somewhere like this, you&#39;ll recognize it. If you haven&#39;t, maybe you&#39;ll understand something about what it&#39;s like, and consider yourself lucky.</p>
<p>The numbers at the end are real, by the way. All of them.<sup><a id="footnote-ref-numbers" href="#footnote-numbers" data-footnote-ref data-tooltip="Every single one. The game is fiction in the same way receipts are fiction: everything on them actually happened, they&amp;#39;re just printed on different paper. Plus, I worked at a place where numbers mattered." aria-describedby="footnote-label">4</a></sup></p>
<hr>
<p><a href="/games/thank-you-for-your-service/">Play Thank You For Your Service</a></p>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-choices">
<p>Play it and see if they do anything. Don&#39;t blame the receipt printer, it&#39;s just a messenger. <a href="#footnote-ref-choices" data-footnote-backref aria-label="Back to reference choices">↩</a></p>
</li>
<li id="footnote-model">
<p>A completely random model number, of course. I was tempted to use 69 in there but I&#39;m a responsible raccoon. <a href="#footnote-ref-model" data-footnote-backref aria-label="Back to reference model">↩</a></p>
</li>
<li id="footnote-skip">
<p>But you wouldn&#39;t do that, now would you? <a href="#footnote-ref-skip" data-footnote-backref aria-label="Back to reference skip">↩</a></p>
</li>
<li id="footnote-numbers">
<p>Every single one. The game is fiction in the same way receipts are fiction: everything on them actually happened, they&#39;re just printed on different paper. Plus, I worked at a place where numbers mattered. <a href="#footnote-ref-numbers" data-footnote-backref aria-label="Back to reference numbers">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>dev</category>
            <category>games</category>
            <category>building-in-public</category>
        </item>
        <item>
            <title><![CDATA[Technical Excellence Is Not Enough]]></title>
            <link>https://raccoon.land/posts/technical-excellence-is-not-enough/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/technical-excellence-is-not-enough/</guid>
            <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A field guide to being right when it doesn't matter.]]></description>
            <content:encoded><![CDATA[<p>Organizations don&#39;t optimize for correctness. They optimize for comfort. Not because of bad managers or stupid coworkers, but because that&#39;s how teams work.</p>
<p>You build the right thing. It gets validated. Then it gets overridden. Nobody disagrees with the technical argument, but accepting it costs more right now than ignoring it. Ignoring it costs more later, but later is someone else&#39;s problem.</p>
<p>I&#39;ve watched this happen at every company I&#39;ve worked at. Different teams, different bosses, different cultures, same pattern. The standard advice is always &quot;communicate better, get buy-in, frame it differently.&quot; I&#39;ve tried, and the outcomes don&#39;t change, because the problem isn&#39;t communication. It&#39;s structural.</p>
<p>Here are the mechanisms.</p>
<h3 id="comfort-over-correctness">Comfort Over Correctness <a href="#comfort-over-correctness" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Fixing things creates disruption. Not fixing things is invisible until it breaks. Organizations pick invisible.</p>
<p>A code quality tool that tracks whether issues are accumulating or shrinking. One number, never measured before. It doesn&#39;t change rules or add warnings, just makes the existing count visible. One extra command when the count changes.</p>
<p>The person who admits they don&#39;t look at warnings votes against the tool.<sup><a id="footnote-ref-irony" href="#footnote-irony" data-footnote-ref data-tooltip="The argument about whether to track warnings motivated someone on the team to start fixing warnings. A multi-day team conflict accomplished what the tool would have done quietly in CI." aria-describedby="footnote-label">1</a></sup> It gets removed before the trial period starts. The warnings keep accumulating, nobody notices, because nobody was looking. That was the problem the tool solved.</p>
<p>The cost of a small disruption is immediate and obvious. The cost of not fixing things shows up months later as a bug, an outage, a pattern nobody can trace back to any one decision. Every individual choice to go with comfort is defensible. The accumulated result is nobody&#39;s fault specifically. It just happens.</p>
<p>Correctness wins when the cost of ignoring it becomes impossible to miss: an outage, a customer complaint, data loss. Until then, comfort wins every time. The person trying to prevent the outage is &quot;adding process.&quot; The outage itself is &quot;unexpected.&quot;<sup><a id="footnote-ref-unexpected" href="#footnote-unexpected" data-footnote-ref data-tooltip="It&amp;#39;s never unexpected to the person who tried to prevent it. But they&amp;#39;ve already been told to stop &amp;quot;adding process,&amp;quot; so they just fix it at 4 AM and don&amp;#39;t say anything." aria-describedby="footnote-label">2</a></sup></p>
<p>When someone asks for your input before building (&quot;does this approach seem reasonable?&quot;), the same technical expertise that creates friction elsewhere becomes an asset. Compromises happen. Ideas improve. The difference isn&#39;t the people. It&#39;s the direction: being asked to evaluate vs. presenting something already built. One is collaboration. The other triggers the comfort reflex.</p>
<h3 id="consensus-as-veto">Consensus As Veto <a href="#consensus-as-veto" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Improvement often requires buy-in from the people whose behavior would change. They vote against the change. The process designed to be fair becomes a wall.</p>
<p>The person who introduced the workaround votes against the clean solution. The person who doesn&#39;t follow quality standards votes against the tool that makes violations visible. They&#39;re protecting their current workflow, which makes sense for them individually. But improvement can&#39;t happen through consensus when the consensus group includes the people who&#39;d have to improve.</p>
<p>&quot;Discuss before shipping&quot; sounds reasonable. In practice, when you&#39;re discussing with people who resist the category of change you&#39;re proposing, the outcome is predetermined. The discussion isn&#39;t evaluation, it&#39;s a veto dressed as process.<sup><a id="footnote-ref-process" href="#footnote-process" data-footnote-ref data-tooltip="Bonus points if someone cites their process certification while arguing against a one-step process change." aria-describedby="footnote-label">3</a></sup></p>
<p>You notice this when the standard is applied selectively. The same people who required pre-approval for your small tooling change ship their own changes without discussion. The rule exists to slow down the unfamiliar, not to govern change in general.</p>
<p>When I had full autonomy over a project, it grew for years and got industry recognition. My idea, my execution, no approval chain, same person, same skills. The thing that makes me effective is the thing consensus processes kill: acting on technical judgment without waiting for permission from people who don&#39;t share it.</p>
<h3 id="responsibility-without-authority">Responsibility Without Authority <a href="#responsibility-without-authority" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>You&#39;re the person who understands the systems. When something breaks at night, you fix it. When an architectural decision needs making, your judgment is what the team relies on. But formally, your judgment carries no more weight than anyone else&#39;s vote. Often less, because proposing change is inherently uncomfortable for everyone else.</p>
<p>Someone reports a performance problem. You profile it, fix the bugs you find, and realize the real issue is architectural. So you build the architectural fix. Working prototype in a few hours. Your boss sees it, says he&#39;s sold, then tells you to spend a week debugging library internals instead. Not because he thinks you&#39;re wrong, but because he&#39;s not ready to absorb the change.</p>
<p>When you try to verify the reported symptoms before committing that week, you&#39;re told you&#39;re being dismissive. Asking questions about the problem reads as denying it exists.</p>
<p>The gap between responsibility and authority is where burnout lives. You own the consequences of bad decisions you can&#39;t prevent. When you try to prevent them, you&#39;re &quot;creating friction.&quot; When you don&#39;t, the problems you predicted arrive on schedule and you fix them at 4 AM.</p>
<h3 id="disproportionate-response">Disproportionate Response <a href="#disproportionate-response" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Reactions don&#39;t scale with the actual impact of a change. They scale with how uncomfortable it makes people.</p>
<p>A tool that adds one step to a build pipeline: multi-day conflict. A prototype on a hidden URL affecting nothing in production: &quot;I can&#39;t evaluate this right now.&quot; A database field instead of a magic string: emoji vote, including from a non-programmer who prefers spreadsheets as a database.<sup><a id="footnote-ref-emoji" href="#footnote-emoji" data-footnote-ref data-tooltip="Architecture by reaction emoji. Democracy in action." aria-describedby="footnote-label">4</a></sup></p>
<p>The pushback tells you nothing about the size of the change. It tells you how much the status quo is valued. Small improvements get the same resistance as large ones, because the threat isn&#39;t the change itself. It&#39;s the precedent that things can be changed.</p>
<h3 id="the-prescription-that-doesnt-work">The Prescription That Doesn&#39;t Work <a href="#the-prescription-that-doesnt-work" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>The advice for this position is always the same: communicate better. Get buy-in. Frame it as their idea. Pick your battles. Show, don&#39;t tell.</p>
<p>I&#39;ve tried all of these. Not casually. I&#39;ve written case studies of my own communication patterns. Tried careful framing with historical context. Proposed explicit trial periods with exit criteria. Done live demos with hard data.</p>
<p>The framing was acknowledged and overridden. The trial was killed before it started. The demo convinced my boss, and he still chose the other path.</p>
<p>&quot;Communicate better&quot; assumes the problem is delivery. That a clearer message would produce a different outcome. But when your audience agrees with your message and still picks comfort, delivery isn&#39;t the issue. The outcome doesn&#39;t change no matter how you present it.</p>
<p>Most writing about this concludes either &quot;I need better soft skills&quot; or &quot;my coworkers are idiots.&quot; Neither is right. The structure does this. Different people in the same positions would produce the same dynamic, and I know this because I&#39;ve been in this position at multiple companies with completely different people. The pattern didn&#39;t change.<sup><a id="footnote-ref-softskills" href="#footnote-softskills" data-footnote-ref data-tooltip="The &amp;quot;soft skills&amp;quot; framing is wild. You&amp;#39;re supposed to learn to communicate your way out of a structural problem. Like taking a public speaking class to fix a broken org chart." aria-describedby="footnote-label">5</a></sup></p>
<h3 id="the-nuance">The Nuance <a href="#the-nuance" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Not every pushback is wrong. Bandwidth constraints exist. A manager who can&#39;t evaluate three architectural changes in one week isn&#39;t failing, they&#39;re managing their capacity.<sup><a id="footnote-ref-sold" href="#footnote-sold" data-footnote-ref data-tooltip="What IS a problem is validating work and then overriding it. &amp;quot;I&amp;#39;m sold on this, but do the other thing first&amp;quot; is worse than just disagreeing. It tells you your judgment is correct and irrelevant at the same time." aria-describedby="footnote-label">6</a></sup></p>
<p>But when correct work gets validated then deprioritized across multiple teams and years, the individual justifications stop being the point. Each one is defensible on its own. The pattern is the signal.</p>
<p>The people involved are usually reasonable, acting in good faith, doing what works for them. The outcome is still that correct technical work keeps getting pushed aside, no matter who&#39;s in the room.</p>
<h3 id="what-changes-it">What Changes It <a href="#what-changes-it" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Authority matching responsibility. That&#39;s the only fix I&#39;ve seen work. Either you get decision-making power that matches the decisions you&#39;re already making, or you find a place that treats your judgment as an asset instead of something to manage.</p>
<p>If you&#39;re in this position (relied upon, validated, powerless), you&#39;re not imagining it. And it&#39;s not a communication problem. &quot;Just communicate better&quot; is the advice equivalent of &quot;have you tried not being depressed?&quot;</p>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-irony">
<p>The argument about whether to track warnings motivated someone on the team to start fixing warnings. A multi-day team conflict accomplished what the tool would have done quietly in CI. <a href="#footnote-ref-irony" data-footnote-backref aria-label="Back to reference irony">↩</a></p>
</li>
<li id="footnote-unexpected">
<p>It&#39;s never unexpected to the person who tried to prevent it. But they&#39;ve already been told to stop &quot;adding process,&quot; so they just fix it at 4 AM and don&#39;t say anything. <a href="#footnote-ref-unexpected" data-footnote-backref aria-label="Back to reference unexpected">↩</a></p>
</li>
<li id="footnote-process">
<p>Bonus points if someone cites their process certification while arguing against a one-step process change. <a href="#footnote-ref-process" data-footnote-backref aria-label="Back to reference process">↩</a></p>
</li>
<li id="footnote-emoji">
<p>Architecture by reaction emoji. Democracy in action. <a href="#footnote-ref-emoji" data-footnote-backref aria-label="Back to reference emoji">↩</a></p>
</li>
<li id="footnote-softskills">
<p>The &quot;soft skills&quot; framing is wild. You&#39;re supposed to learn to communicate your way out of a structural problem. Like taking a public speaking class to fix a broken org chart. <a href="#footnote-ref-softskills" data-footnote-backref aria-label="Back to reference softskills">↩</a></p>
</li>
<li id="footnote-sold">
<p>What IS a problem is validating work and then overriding it. &quot;I&#39;m sold on this, but do the other thing first&quot; is worse than just disagreeing. It tells you your judgment is correct and irrelevant at the same time. <a href="#footnote-ref-sold" data-footnote-backref aria-label="Back to reference sold">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>work</category>
            <category>career</category>
            <category>dev</category>
        </item>
        <item>
            <title><![CDATA[Activation Energy]]></title>
            <link>https://raccoon.land/posts/activation-energy/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/activation-energy/</guid>
            <pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Motivation is fake. Pain and play are real. The energy comes before the decision.]]></description>
            <content:encoded><![CDATA[<p>I built nearly zero personal projects for over a decade. All my energy went into work, and whatever was left went into surviving the rest of the day. The few side projects I did have were always for other people - organizing a Steam sale event for local game devs, building a tool to manage it. Nothing just for me.</p>
<p>Then in the last few months, I shipped a blog engine, a procedural music generator, games, and a bunch of tools. Not because I became more disciplined. Because I finally noticed what actually gets me to build things.</p>
<h3 id="pain">Pain <a href="#pain" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>The first pattern I recognized: when something annoys me enough, it gets built. No planning, no decision to start. The annoyance just hits a point where I&#39;m already building before I&#39;ve consciously decided to.</p>
<p>Sometimes it&#39;s a slow burn - weeks of friction piling up until one night it snaps and I&#39;m deep in code at 2am. Sometimes it&#39;s instant - something breaks and I&#39;m fixing it within minutes. The threshold varies, but the mechanism is the same: I don&#39;t need motivation because the pain is doing that job for me.</p>
<p>I built this blog&#39;s engine because I wanted to write and every existing option felt wrong. At work, when something breaks badly enough, it gets fixed that night - no willpower required.<sup><a id="footnote-ref-1" href="#footnote-1" data-footnote-ref data-tooltip="This post is specifically about personal projects, but the same pattern works at my day job too. Pain-driven fixes are fast. Assigned infrastructure work I don&amp;#39;t care about… isn&amp;#39;t." aria-describedby="footnote-label">1</a></sup></p>
<p>I called this &quot;pain-driven development&quot; for a while. Pain provides activation energy. That felt like the whole story.</p>
<h3 id="play">Play <a href="#play" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Then I <a href="/posts/how-insane-can-i-make-this/">accidentally built a procedural music generator</a> over three sleepless nights because I asked &quot;how insane can I make this?&quot; I&#39;m still expanding it with new genres and planning to use it for game audio. Nobody asked me to. Nothing was broken.</p>
<p>I <a href="/posts/making-small-games/">started making small games</a> because one evening I looked at something silly I&#39;d made and thought &quot;wait, I can make games out of this?&quot; Now I have dozens of ideas and I keep coming back to it.</p>
<p>The feeling is different from pain. It starts with curiosity - &quot;I wonder if…&quot; or &quot;what if…&quot; - and then I can&#39;t stop pulling the thread. I lose track of time not because I&#39;m frustrated but because I&#39;m having fun. 3am doesn&#39;t feel like 3am. And there&#39;s something about it being <em>mine</em> - not work, not obligation, just something I chose to make exist - that keeps the energy going.</p>
<h3 id="the-actual-pattern">The actual pattern <a href="#the-actual-pattern" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Both pain and play work as activation energy. What doesn&#39;t work is trying to manufacture it. &quot;This would be useful someday.&quot; &quot;I should really build that.&quot; Obligation without energy behind it. Those don&#39;t go anywhere.</p>
<p>I have ADHD<sup><a id="footnote-ref-2" href="#footnote-2" data-footnote-ref data-tooltip="Untreated, by the way. Not by choice. That&amp;#39;s a different post." aria-describedby="footnote-label">2</a></sup>. Executive dysfunction means the gap between &quot;I should do this&quot; and actually doing it can be infinite - unless something else closes it for me. Pain closes it. Play closes it. Deciding to be motivated doesn&#39;t.</p>
<p>The pattern isn&#39;t pain-driven development. It&#39;s that I don&#39;t decide to build and then find motivation. I notice energy that&#39;s already there - whether it hurts or it&#39;s fun - and ride it. The decision comes after the energy, not before.</p>
<p>A decade of nothing, and then a few months of shipping more than I ever have. The difference wasn&#39;t trying harder. It was stopping pretending I could force it.<sup><a id="footnote-ref-3" href="#footnote-3" data-footnote-ref data-tooltip="Experimentation being cheaper now helps too. More on that eventually." aria-describedby="footnote-label">3</a></sup></p>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-1">
<p>This post is specifically about personal projects, but the same pattern works at my day job too. Pain-driven fixes are fast. Assigned infrastructure work I don&#39;t care about… isn&#39;t. <a href="#footnote-ref-1" data-footnote-backref aria-label="Back to reference 1">↩</a></p>
</li>
<li id="footnote-2">
<p>Untreated, by the way. Not by choice. That&#39;s a different post. <a href="#footnote-ref-2" data-footnote-backref aria-label="Back to reference 2">↩</a></p>
</li>
<li id="footnote-3">
<p>Experimentation being cheaper now helps too. More on that eventually. <a href="#footnote-ref-3" data-footnote-backref aria-label="Back to reference 3">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>dev</category>
            <category>adhd</category>
            <category>building-in-public</category>
        </item>
        <item>
            <title><![CDATA[TIL: Why pixel fonts look blurry in browsers (and when to give up)]]></title>
            <link>https://raccoon.land/posts/til-pixel-fonts-blurry/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/til-pixel-fonts-blurry/</guid>
            <pubDate>Sun, 11 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Pixel fonts blur at non-native sizes due to antialiasing. No CSS trick fixes it.]]></description>
            <content:encoded><![CDATA[<p>I built a <a href="https://raccoon.land/games/the-review/" target="_blank" rel="noopener">fake Steam store page</a> using <a href="https://cs16.samke.me/" target="_blank" rel="noopener">cs16.css</a>, a CSS library that recreates the old Counter-Strike 1.6 / early Steam aesthetic. It includes ArialPixel, a pixel font designed on a 16×16 grid.</p>
<p>The font looked crisp on my Mac. Then a friend sent a screenshot from Linux. Blurry mess.</p>
<h4 id="whats-happening">What&#39;s happening <a href="#whats-happening" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>ArialPixel is designed on a 16×16 pixel grid (em=1024, 64-unit grid). It&#39;s outline-only, no embedded bitmaps. My page uses font sizes from 10px to 14px for body text.</p>
<p>When the font size doesn&#39;t match the design grid (multiples of 16px), the pixel grid doesn&#39;t align with display pixels. Modern browsers apply antialiasing to smooth the edges. Result: blur.</p>
<p>I dug into the font with FontForge.<sup><a id="footnote-ref-fontforge" href="#footnote-fontforge" data-footnote-ref data-tooltip="First time using FontForge. It&amp;#39;s... a lot. But it got the job done." aria-describedby="footnote-label">1</a></sup> The GASP table had empty hinting flags - no gridfitting instructions telling renderers how to snap to pixels. (I did gasp when I saw it. Sorry.)</p>
<p>Here&#39;s a sandbox comparing everything I tried:</p>
<p><a href="./font_comparison.webp" target="_blank"><img src="./font_comparison.webp" alt="Font comparison showing various pixel fonts and rendering approaches" loading="lazy"></a></p>
<h4 id="the-rabbit-hole">The rabbit hole <a href="#the-rabbit-hole" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>I tried a lot of things. None of them worked.</p>
<p><strong>Font-level fixes:</strong> I fixed the GASP table to enable gridfitting - macOS ignored it. Embedded bitmap strikes at target sizes - browsers don&#39;t use embedded bitmaps.</p>
<p><strong>CSS tricks:</strong> <code>image-rendering: pixelated</code> only works on images, not text. <code>-webkit-font-smoothing: none</code> - Chrome removed support years ago. <code>font-smooth: never</code> isn&#39;t even a real property, thanks outdated Stack Overflow answers.<sup><a id="footnote-ref-stackoverflow" href="#footnote-stackoverflow" data-footnote-ref data-tooltip="The amount of confidently wrong CSS answers about font rendering is impressive. Most are from 2012 and reference properties that never existed or were removed a decade ago." aria-describedby="footnote-label">2</a></sup></p>
<p><strong>Rendering workarounds:</strong> Canvas with <code>fillText()</code> always antialiases, no way to disable. WebGL with <code>GL_NEAREST</code> sampling - the source was already antialiased by the time I could touch it. Manual pixel scaling (render large, scale down) - still blurry source.</p>
<p><strong>Other pixel fonts:</strong> VT323, Silkscreen, Press Start 2P - tested them but they didn&#39;t fit the CS 1.6 aesthetic anyway. Too bold, wrong vibe.</p>
<h4 id="why-nothing-works">Why nothing works <a href="#why-nothing-works" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>Browser text rendering happens before CSS or JavaScript can intervene. By the time you can access the rendered text (canvas, WebGL), antialiasing has already been applied. There&#39;s no API to say &quot;render this font without smoothing.&quot;</p>
<p>The only ways to get crisp pixel fonts are using sizes that match the font&#39;s design grid (16px, 32px, etc.), or rendering text as pre-made images. Neither worked for my use case - I needed readable body text at small sizes.</p>
<h4 id="the-solution">The solution <a href="#the-solution" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>Give up. Offer users a toggle.</p>
<pre><code class="language-css">html.hd-mode * {
  font-family: Tahoma, &#39;Segoe UI&#39;, system-ui, sans-serif !important;
}
</code></pre>
<p>The page now has an &quot;HD Font&quot; toggle in the footer. Users on displays where the pixel font looks bad can switch to Tahoma (which is what CS 1.6 actually used). Users where it looks fine keep the aesthetic.</p>
<p>Sometimes the pragmatic solution is admitting the technically &quot;correct&quot; solution doesn&#39;t exist.</p>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-fontforge">
<p>First time using FontForge. It&#39;s... a lot. But it got the job done. <a href="#footnote-ref-fontforge" data-footnote-backref aria-label="Back to reference fontforge">↩</a></p>
</li>
<li id="footnote-stackoverflow">
<p>The amount of confidently wrong CSS answers about font rendering is impressive. Most are from 2012 and reference properties that never existed or were removed a decade ago. <a href="#footnote-ref-stackoverflow" data-footnote-backref aria-label="Back to reference stackoverflow">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>til</category>
            <category>fonts</category>
            <category>css</category>
            <category>web</category>
        </item>
        <item>
            <title><![CDATA[How I accidentally built a procedural music generator]]></title>
            <link>https://raccoon.land/posts/how-insane-can-i-make-this/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/how-insane-can-i-make-this/</guid>
            <pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[I asked 'how insane can I make this?' at midnight. Three sleepless nights later: nine genres, twenty radio stations, and Dumpster Diving Certification ads.]]></description>
            <content:encoded><![CDATA[<pre><code>~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
         WELCOME TO THE INFORMATION SUPERHIGHWAY
              You are visitor #847293
        [ This page is under construction ]
~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
</code></pre>
<p>I wanted more than light mode and dark mode.</p>
<p>Three days later I had a procedural music generator with nine genres, twenty radio stations, and fictional advertisements for Dumpster Diving Certification Courses.</p>
<p>This is the story of feature creep at 3am.</p>
<h4 id="december-3rd-midnight">December 3rd, midnight <a href="#december-3rd-midnight" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>I was tired. I should have gone to sleep. Instead, I started messing with adding some themes to this blog.</p>
<p>First came the silly ones. A hotdog stand theme with two modes: ketchup (red background, yellow text) and mustard (yellow background, red text). A terminal theme. A few others.<sup><a id="footnote-ref-themes" href="#footnote-themes" data-footnote-ref data-tooltip="You can try them all in the footer. The hotdog theme is a Windows 3.11 reference - click it to swap between ketchup and mustard." aria-describedby="footnote-label">1</a></sup></p>
<p>Then I started experimenting with randomly generated colors. And fonts. And then I asked myself a dangerous question:</p>
<p><strong>&quot;How insane can I make this?&quot;</strong></p>
<p>The answer was: very.</p>
<p>Three hours later, I had a Geocities theme. Everything randomized. Cursor trails. Particles. Canvas animations. Rainbow text. Marquees.<sup><a id="footnote-ref-marquee" href="#footnote-marquee" data-footnote-ref data-tooltip="The &lt;code&gt;&amp;lt;marquee&amp;gt;&lt;/code&gt; element still works in browsers. I&amp;#39;m not saying you should use it. I&amp;#39;m saying I did." aria-describedby="footnote-label">2</a></sup> Up to four status bars on any edge of the screen, each with its own scrolling messages - visitor counters, ICQ numbers, AIM screennames like <code>xX_cool_wolf69Xx</code>, &quot;Now playing: doom_e1m1.mid&quot;, webring links. Elements that flee when you hover over them.</p>
<p>I went to bed at 7:15am, still staring at my phone looking at the beautiful abomination I&#39;d created. In my journal I wrote: &quot;It&#39;s that good.&quot;</p>
<pre><code>*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
          ~*~ SITE FEATURES ~*~

  [x] Falling particles (snowflakes, leaves,
      hearts, or RACCOONS)
  [x] Sparkle trails following your cursor
  [x] Elements that EXPLODE into emoji
  [x] UNDER CONSTRUCTION banners
  [x] Spinning wireframe shapes
  [x] Matrix rain (with raccoons)
  [x] Demoscene fire effects
  [x] Click particles for POINTS
      (raccoons = 25 pts, combo multipliers!)
  [x] Random fonts (Comic Sans, Papyrus,
      Impact, Jokerman, Wingdings...)
  [x] 1-4 status bars in 19 styles
      (Windows 95, Vaporwave, Barbie...)

*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
</code></pre>
<h4 id="december-4th-the-concert">December 4th: the concert <a href="#december-4th-the-concert" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>I woke up at 3pm. Grabbed coffee. Went to see Nemo<sup><a id="footnote-ref-nemo" href="#footnote-nemo" data-footnote-ref data-tooltip="The winner of Eurovision 2024. Non-binary Swiss artist. Incredible live." aria-describedby="footnote-label">3</a></sup> at MeetFactory.</p>
<p>It was wonderful. One of my top three concerts ever, alongside Paradox (Thai rock band I saw completely randomly in Ayutthaya) and Barasuara (Indonesian band I saw completely randomly in a Jakarta shopping mall). Queer crowd. Good energy.</p>
<p>I got home around 11pm, grabbed a kebab on the way, and felt that post-concert creative high. You know the one. When live music leaves you buzzing and you need to <em>make something</em>.</p>
<p>Old Geocities pages had auto-playing MIDIs. Mine didn&#39;t have music.</p>
<p>That felt wrong.</p>
<p>I started looking into Web Audio API. Oscillator synthesis. How hard could it be to generate some bleeps and bloops?</p>
<p>From my journal, December 4th:</p>
<blockquote>
<p>Started working on some improvements to the silly Geocities theme, and somehow added an entire procedurally generated music player with a lot of different genres and radios. Oops. Worth it to not sleep.</p>
</blockquote>
<h4 id="december-5th-nocturnal-trash-panda-energy">December 5th: nocturnal trash panda energy <a href="#december-5th-nocturnal-trash-panda-energy" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>I didn&#39;t sleep much. Crashed around 4pm after a beer.<sup><a id="footnote-ref-beer" href="#footnote-beer" data-footnote-ref data-tooltip="&amp;quot;It can&amp;#39;t fuck me up even more when I didn&amp;#39;t sleep&amp;quot; - past me, accurately predicting the immediate crash that followed" aria-describedby="footnote-label">4</a></sup> Woke up at 11pm.</p>
<p>And then came what I call &quot;nocturnal trash panda energy&quot; - that 2am productivity mode where everything clicks and you can&#39;t stop even if you wanted to.</p>
<p>I added automix. Genre detection based on page content. A chaos slider. Nine genres: chiptune, MIDI, synthwave, lofi, vaporwave, ambient, techno, trance, happycore.</p>
<p>I didn&#39;t know basically anything about procedural music generation going in. Still pretty lost, honestly. But LLMs made it possible to experiment without years of music theory. Try things, see what sounds right, iterate.</p>
<pre><code>*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
           ~*~ RADIO STATIONS ~*~

  97.3  RACCOON FM - Nocturnal beats
  3.AM  DUMPSTER DIVE FM - We eat everything
  140.0 RAVE.NET - Maximum BPM, minimum sleep
  0.01  THE VOID - ...
  0.00  MIDNIGHT.GOV - Numbers. Only numbers.
  45.0  CAFE.FM - Take your time
  ???   PIRATE RADIO - Unauthorized broadcast
  1.800 HOLD MUSIC - Your call is important

         [ 20 stations total ]

*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
</code></pre>
<h4 id="december-6th-shipped">December 6th: shipped <a href="#december-6th-shipped" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>Didn&#39;t sleep again. Shipped an initial version in the morning. Stopped by for chlebíčky.<sup><a id="footnote-ref-chlebicky" href="#footnote-chlebicky" data-footnote-ref data-tooltip="Czech open-faced sandwiches. The correct breakfast after an all-nighter." aria-describedby="footnote-label">5</a></sup> Kept listening to the generated music because it&#39;s genuinely fun.</p>
<p>Slept 3.5 hours in the afternoon. Woke up around 5pm and genuinely couldn&#39;t tell if it was morning or evening.</p>
<p>The music player has two modes:</p>
<p><strong>Tape Mode</strong> 📼 - Your page becomes a mixtape. The music places you on a two-axis mood map (chill↔energy, dark↔bright) based on what it detects: time of day, page content, emoji types, visual chaos level. Code blocks push toward digital/bright. Long paragraphs are chill. 🦝 triggers nocturnal lofi vibes. 2-5am shifts everything darker and slower. Weekend nights add party energy. Flip to Side B and the whole mood inverts.</p>
<p><strong>Radio Mode</strong> 📻 - Twenty stations with DJs, jingles, and commercials for fictional 90s web products. GuestBook Plus. MIDI Collection Pro. The Forbidden Cat Adoption Agency. Dumpster Diving Certification (licensed by actual raccoons).</p>
<p>Old posts get the worn-cassette treatment. Tape hiss. Vinyl crackle. The older the post, the dustier the sound. Archives should sound like archives.</p>
<h4 id="the-chaos-slider">The chaos slider <a href="#the-chaos-slider" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>There&#39;s a slider labeled CHAOS. Turn it up and everything gets weirder. More detuning. More wobble. Genre shifts. Turn it down for a calmer sound.</p>
<p>But where&#39;s the fun in that?</p>
<h4 id="whats-next">What&#39;s next <a href="#whats-next" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>This thing is becoming a playground. Some directions I&#39;m excited about:</p>
<p><strong>More ways to generate:</strong> Right now it reacts to page content or plays radio stations. I want modes for generating specific things - &quot;give me 30 seconds of tense ambient&quot; or &quot;loop-ready chiptune for a game scene.&quot; Shareable song seeds so you can save and recall your favorites. Stem exports for mixing.</p>
<p><strong>More genres:</strong> Rock/metal, drum &amp; bass, trip-hop, eurodance, industrial, gabber, acid. The <a href="https://github.com/aviraccoon/nocturnal-scribbles/blob/main/src/geocities/music/IDEAS.md" target="_blank" rel="noopener">IDEAS.md</a> has the full list.</p>
<p><strong>More radio chaos:</strong> Dial-up modem handshake sounds between songs. ICQ &quot;uh oh&quot; notifications. Weather reports for the information superhighway. Time-locked stations that only broadcast at certain hours. Winamp skins for the player.</p>
<p><strong>Game audio:</strong> I&#39;m <a href="/posts/making-small-games/">making small games</a> and the procedural approach means I don&#39;t need to compose anything - just define parameters and generate. Background music, menu themes, sound effects.</p>
<p><strong>More silly things:</strong> Easter eggs. A cursor theremin. Typing percussion. Whatever sounds fun at 3 AM.</p>
<p>No timeline. It&#39;ll happen when it happens. The whole thing is <a href="https://github.com/aviraccoon/nocturnal-scribbles" target="_blank" rel="noopener">open source</a> (MIT license). The code is a beautiful mess, like all good Geocities tributes.</p>
<hr>
<p>Try it yourself: toggle &quot;geocities&quot; in the theme picker (footer). Not every Geocities page had auto-playing music, so neither does every refresh here - but you can always enable it manually with the checkbox below the theme buttons.<sup><a id="footnote-ref-fans" href="#footnote-fans" data-footnote-ref data-tooltip="The full Geocities experience made my MacBook Pro fans spin. The standalone toggle exists for a reason." aria-describedby="footnote-label">6</a></sup> Every refresh is different. Every page sounds different.</p>
<p>Welcome to the information superhighway.</p>
<p><marquee>~*~ Thanks for visiting! Please sign my guestbook! ~*~</marquee></p>
<pre><code>~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~

         Thanks for visiting my page!!!
     Please sign my guestbook (coming soon)

            [  PREV  |  RANDOM  |  NEXT  ]
              ~ Raccoon WebRing ~

         Best viewed in Netscape Navigator 4.0
              at 800x600 resolution
                  16-bit color

  This site is a member of the Nocturnal Animals
  WebRing. To visit other sites in the ring,
  click PREV or NEXT. To visit a random site,
  click RANDOM.

  ICQ#: 222850657
  AIM: aviraccoon
  Last updated: December 2025

~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
</code></pre>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-themes">
<p>You can try them all in the footer. The hotdog theme is a Windows 3.11 reference - click it to swap between ketchup and mustard. <a href="#footnote-ref-themes" data-footnote-backref aria-label="Back to reference themes">↩</a></p>
</li>
<li id="footnote-marquee">
<p>The <code>&lt;marquee&gt;</code> element still works in browsers. I&#39;m not saying you should use it. I&#39;m saying I did. <a href="#footnote-ref-marquee" data-footnote-backref aria-label="Back to reference marquee">↩</a></p>
</li>
<li id="footnote-nemo">
<p>The winner of Eurovision 2024. Non-binary Swiss artist. Incredible live. <a href="#footnote-ref-nemo" data-footnote-backref aria-label="Back to reference nemo">↩</a></p>
</li>
<li id="footnote-beer">
<p>&quot;It can&#39;t fuck me up even more when I didn&#39;t sleep&quot; - past me, accurately predicting the immediate crash that followed <a href="#footnote-ref-beer" data-footnote-backref aria-label="Back to reference beer">↩</a></p>
</li>
<li id="footnote-chlebicky">
<p>Czech open-faced sandwiches. The correct breakfast after an all-nighter. <a href="#footnote-ref-chlebicky" data-footnote-backref aria-label="Back to reference chlebicky">↩</a></p>
</li>
<li id="footnote-fans">
<p>The full Geocities experience made my MacBook Pro fans spin. The standalone toggle exists for a reason. <a href="#footnote-ref-fans" data-footnote-backref aria-label="Back to reference fans">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>dev</category>
            <category>web</category>
            <category>building-in-public</category>
        </item>
        <item>
            <title><![CDATA[Making small games]]></title>
            <link>https://raccoon.land/posts/making-small-games/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/making-small-games/</guid>
            <pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I started making small games. Different tech each time, no deadlines, ship when it's fun.]]></description>
            <content:encoded><![CDATA[<p>I started making small games. Not as a career change or anything - I just need creative projects that aren&#39;t my day job, and games are more interesting to me than writing blog posts.<sup><a id="footnote-ref-irony" href="#footnote-irony" data-footnote-ref data-tooltip="And yet here I am, writing a blog post about it. The irony isn&amp;#39;t lost on me." aria-describedby="footnote-label">1</a></sup></p>
<p>The first one is already out: <a href="/games/the-review/">The Review</a>.</p>
<p>What if a life had a Steam store page? Patch notes from v0.0, locked achievements, reviews from different perspectives, and a sleep schedule DLC that&#39;s been &quot;coming soon&quot; for decades. Retro Steam aesthetic using <a href="https://cs16.samke.me/" target="_blank" rel="noopener">cs16.css</a>. Easter eggs for those who click around. It took one evening to build.</p>
<p><a href="/games/the-review/"><img src="./the-review.png" alt="The Review - a fake Steam store page" loading="lazy"></a></p>
<h4 id="why-games-though">Why games though? <a href="#why-games-though" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>Writing describes things. Games make you <em>do</em> things. There&#39;s something about interaction that hits different - you&#39;re not just reading about a situation, you&#39;re in it, making choices, feeling the consequences. That&#39;s interesting to me.</p>
<p>And the key word is <em>small</em>. A weekend web project, not a two-year commitment where I burn out halfway through and never touch it again. Ship something, learn something, move on.</p>
<h4 id="the-adhd-brain-needs-novelty">The ADHD brain needs novelty <a href="#the-adhd-brain-needs-novelty" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>Here&#39;s the thing - doing the same thing repeatedly kills my motivation. If I built ten games in the same engine with the same workflow, I&#39;d abandon the project by game three. So each one uses whatever tech fits the idea:</p>
<ul>
<li>The Review was vanilla HTML/CSS with cs16.css for the retro Steam look</li>
<li>Future ones might use Godot, Twine, canvas, WebGL, whatever</li>
</ul>
<p>But it&#39;s not just about game engines. Everything around making a game is a learning opportunity - procedural music, pixel art, accessibility,<sup><a id="footnote-ref-a11y" href="#footnote-a11y" data-footnote-ref data-tooltip="Making The Review accessible was its own rabbit hole. Turns out I&amp;#39;d never used a screen reader before. TIL posts incoming." aria-describedby="footnote-label">2</a></sup> shader effects, narrative design. If I already know how to do something, it&#39;s less interesting. If I have to figure it out, I&#39;m engaged.</p>
<p>This is probably terrible advice for anyone trying to ship games professionally. But I&#39;m not doing this professionally.</p>
<p>I&#39;m also open-sourcing the code (MIT license) while keeping the content itself copyrighted.<sup><a id="footnote-ref-open-core" href="#footnote-open-core" data-footnote-ref data-tooltip="Sometimes called &amp;quot;open core&amp;quot; - the technical stuff is open, the creative stuff isn&amp;#39;t." aria-describedby="footnote-label">3</a></sup> If someone wants to learn from how I built something, or fork it for their own project, go for it. The code is the part I&#39;m learning anyway - might as well share that.</p>
<h4 id="no-deadlines-no-roadmap">No deadlines, no roadmap <a href="#no-deadlines-no-roadmap" class="heading-anchor" aria-hidden="true">#</a></h4>
<p>A game takes as long as it takes. Some will be done in an evening, some might take months, some ideas will never happen at all. No schedule, no pressure, no guilt when I don&#39;t ship for a while.</p>
<p>I have a bunch of ideas. Whether they become actual games depends on energy, interest, and whatever else is happening in life. No promises.<sup><a id="footnote-ref-no-promises" href="#footnote-no-promises" data-footnote-ref data-tooltip="This is basically how I approach this entire blog. See the &lt;a href=&quot;/posts/night-shift/&quot;&gt;welcome post&lt;/a&gt; for more on that." aria-describedby="footnote-label">4</a></sup></p>
<p>Games will appear at <a href="/games/">raccoon.land/games</a> when they exist. I&#39;ll write about the interesting technical problems when I feel like it. <a href="/feed.xml">RSS</a> if you want to follow along.</p>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-irony">
<p>And yet here I am, writing a blog post about it. The irony isn&#39;t lost on me. <a href="#footnote-ref-irony" data-footnote-backref aria-label="Back to reference irony">↩</a></p>
</li>
<li id="footnote-a11y">
<p>Making The Review accessible was its own rabbit hole. Turns out I&#39;d never used a screen reader before. TIL posts incoming. <a href="#footnote-ref-a11y" data-footnote-backref aria-label="Back to reference a11y">↩</a></p>
</li>
<li id="footnote-open-core">
<p>Sometimes called &quot;open core&quot; - the technical stuff is open, the creative stuff isn&#39;t. <a href="#footnote-ref-open-core" data-footnote-backref aria-label="Back to reference open-core">↩</a></p>
</li>
<li id="footnote-no-promises">
<p>This is basically how I approach this entire blog. See the <a href="/posts/night-shift/">welcome post</a> for more on that. <a href="#footnote-ref-no-promises" data-footnote-backref aria-label="Back to reference no-promises">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>dev</category>
            <category>games</category>
            <category>building-in-public</category>
        </item>
        <item>
            <title><![CDATA[The Night Shift Begins]]></title>
            <link>https://raccoon.land/posts/night-shift/</link>
            <guid isPermaLink="false">https://raccoon.land/posts/night-shift/</guid>
            <pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome to my corner. I write about ADHD, my projects, game dev, and whatever else comes to my mind. One pizza for this raccoon = one post (maybe).]]></description>
            <content:encoded><![CDATA[<p>I&#39;m turning 33 while writing this. What a perfect time to start my own blog, right? Before I do other posts, let me do the classic welcome post in a very trashy way.</p>
<h3 id="who-am-i">Who am I? <a href="#who-am-i" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>I go by <code>aviraccoon</code> on the Internet. Avi in real life.<sup><a id="footnote-ref-1" href="#footnote-1" data-footnote-ref data-tooltip="Thanks, I know, nice name, I chose it myself, did your mom or dad pick it for you?" aria-describedby="footnote-label">1</a></sup></p>
<p>I&#39;m nonbinary (using they/them pronouns), got untreated ADHD (attempts had been made), I&#39;m a furry (a raccoon 🦝), therian,<sup><a id="footnote-ref-2" href="#footnote-2" data-footnote-ref data-tooltip="A person who experiences being and identifies as a non-human animal on an integral, personal level. &lt;a href=&quot;https://therian-guide.com/index.php/2-therianthropy.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;See this website&lt;/a&gt; for a better description." aria-describedby="footnote-label">2</a></sup> living in Prague, Czech Republic.</p>
<p>I like digging deep into whatever I&#39;m focused on at the time - be it a programming thing like improving existing systems, trying to make my ADHD more bearable, or finding a new special interest like safety systems in public transport. That&#39;s when I thrive. And often, these things are very much connected.</p>
<p>In my career, I&#39;m a programmer/marketing/community/producer mix, around game dev for over 13 years at the time of writing. Now working on a site for seeing how PC and console games are selling (and always fighting with React, TypeScript and Go).<br>Before that, I spent a bunch of years working on Euro Truck Simulator 2, during which I made a project I&#39;m proud of and will never shut up about - I started the Czech &amp; Slovak Games Week sale to help local game devs, which is these days <a href="https://store.steampowered.com/news/group/4145017/view/497186807117513037" target="_blank" rel="noopener">the largest multi-game non-Valve Steam event</a>. I don&#39;t contribute to it anymore, but it was really fun to do.</p>
<p>I care about equal rights, protecting workers, and overall having strong ethics. I don&#39;t accept bullshit from people I&#39;m around, and I expect the same from them.</p>
<h3 id="why-does-this-blog-exist-why-now">Why does this blog exist? Why now? <a href="#why-does-this-blog-exist-why-now" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Because I have a bunch of things to talk about and I have no place for long-form posts like this.</p>
<p>Screaming into the void in short-form (fediverse, Bluesky) just doesn&#39;t fit me, I usually keep forgetting these things exist unless I have a terrible pun to write.<sup><a id="footnote-ref-3" href="#footnote-3" data-footnote-ref data-tooltip="That can backfire as John Mastodon retooted me once and I got a bunch of weirdos from main .social in my notifs, no thanks." aria-describedby="footnote-label">3</a></sup></p>
<p>I&#39;ve been playing with the idea of having my personal blog over some time, but I never had enough time, energy, and motivation to do so.</p>
<p>Let&#39;s not count the previous attempt in February 2024 when I posted the welcome post, and never anything else again. I&#39;m in a much better state to start blogging now without fearing I will do the same mistake as before. How? With a mix of a few things.</p>
<p>In June this year, I started collecting my thoughts in an Obsidian vault (appropriately called <code>raccoon-life</code>). I was journaling for <em>years</em>, but these notes were usually just a few sentences for a day, or even less. I changed my approach, now I write everything down. And I do mean <em>everything</em>.</p>
<p>Turns out that doing this helps a lot with my ADHD, I can write things down and then forget about them until I need them again. And it also helps me now with thinking about enough topics in advance so I can confidently say &quot;yeah, this can work.&quot;</p>
<h3 id="what-am-i-going-to-chirr4-about">What am I going to chirr<sup><a id="footnote-ref-4" href="#footnote-4" data-footnote-ref data-tooltip="Have you ever seen a raccoon talk? They chirr!" aria-describedby="footnote-label">4</a></sup> about <a href="#what-am-i-going-to-chirr4-about" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Various stuff I&#39;m interested in, things that fascinate me, help me, bother me, or otherwise affect me in any way.</p>
<p>One big topic will be ADHD and things and tools related to it, how I handle this when I can&#39;t get support of the system. That means talking in detail about my personal vault, how I process things in it (hint: it&#39;s a lot of automated processing, including LLMs, to help me).</p>
<p>Related to this is working on various projects which help me further. I build software when the level of annoyance with things I try to use reach &quot;fuck it&quot; levels, that includes for example creating my own task system as I need something custom.</p>
<p>Then I have a variety of ideas for blogs about my life in general, about working in game dev (maybe including some horror stories?), travel, being a furry and therian, and other things in life. And whatever else I feel like I want to scream into the void about.</p>
<p>Note that I will talk about my approaches to LLMs and similar, as that&#39;s very much connected to how I tend to do things overall, it&#39;s a tool I use to fight with my ADHD, it made programming fun, etc.<br>So if you&#39;re strongly against this stuff, no hurt feelings. I understand, it&#39;s everywhere and everyone&#39;s sick of it.</p>
<h3 id="how-im-approaching-this">How I&#39;m approaching this <a href="#how-im-approaching-this" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>There will be no schedule. I sometimes have energy to do something an entire night, then I can&#39;t bother doing anything for a week. Chaotic good, let&#39;s say.</p>
<p>I may jump from topic to topic, keep things unfinished. No promises here. Even I can&#39;t force myself to do some things, and blog isn&#39;t something I&#39;m supposed to force myself into, it must be fun for me. And I can&#39;t plan ahead much, that just creates guilt for me. Best posts will be the ones I write late at night without any planning, most likely.</p>
<p>So absolutely no promises about any kind of schedule or what I&#39;ll actually talk about.</p>
<h3 id="interested-hit-the-rss-bell-err-button">Interested? Hit the RSS bell, err, button <a href="#interested-hit-the-rss-bell-err-button" class="heading-anchor" aria-hidden="true">#</a></h3>
<p>Look, there&#39;s no analytics, no tracking, no newsletter or anything. I want a good old site with no bullshit like this. It&#39;s all running on a <a href="https://github.com/aviraccoon/nocturnal-scribbles" target="_blank" rel="noopener">very simple blog generator</a> I built in one night for this purpose.</p>
<p>There&#39;s the main RSS feed and also per-tag feeds if you&#39;re interested only in specific areas.</p>
<p>Welcome to my corner of the Internet. One pizza for this raccoon = one post. (I may just eat the pizza without doing anything. I be like that sometimes.)</p>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-1">
<p>Thanks, I know, nice name, I chose it myself, did your mom or dad pick it for you? <a href="#footnote-ref-1" data-footnote-backref aria-label="Back to reference 1">↩</a></p>
</li>
<li id="footnote-2">
<p>A person who experiences being and identifies as a non-human animal on an integral, personal level. <a href="https://therian-guide.com/index.php/2-therianthropy.html" target="_blank" rel="noopener">See this website</a> for a better description. <a href="#footnote-ref-2" data-footnote-backref aria-label="Back to reference 2">↩</a></p>
</li>
<li id="footnote-3">
<p>That can backfire as John Mastodon retooted me once and I got a bunch of weirdos from main .social in my notifs, no thanks. <a href="#footnote-ref-3" data-footnote-backref aria-label="Back to reference 3">↩</a></p>
</li>
<li id="footnote-4">
<p>Have you ever seen a raccoon talk? They chirr! <a href="#footnote-ref-4" data-footnote-backref aria-label="Back to reference 4">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
            <category>meta</category>
            <category>life</category>
        </item>
    </channel>
</rss>