<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss-styles.xsl" type="text/xsl"?><rss version="2.0"><channel><title>threesided — journal</title><description>Short technical notes from real client + lab work. Bugs that ate a day, fixes that took three characters, the trade-offs between.</description><link>https://threesided.com/</link><language>en-us</language><copyright>© 2026 threesided</copyright><ttl>1440</ttl><item><title>Six demos, almost no libraries</title><link>https://threesided.com/journal/six-demos-almost-no-libraries/</link><guid isPermaLink="true">https://threesided.com/journal/six-demos-almost-no-libraries/</guid><description>We added six bleeding-edge demos to the lab. The thread through almost all of them: the thing we used to reach for a library to do, the browser now does itself.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate><category>lab</category><category>webgpu</category><category>css</category><category>web-audio</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>The cookie banner most of you won&apos;t see</title><link>https://threesided.com/journal/the-cookie-banner-most-of-you-wont-see/</link><guid isPermaLink="true">https://threesided.com/journal/the-cookie-banner-most-of-you-wont-see/</guid><description>We added analytics to threesided without slapping a cookie wall in front of everyone. The banner only shows where the law actually requires it.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate><category>analytics</category><category>privacy</category><category>consent</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Building a grimoire instead of forking one</title><link>https://threesided.com/journal/building-a-grimoire-instead-of-forking-one/</link><guid isPermaLink="true">https://threesided.com/journal/building-a-grimoire-instead-of-forking-one/</guid><description>We had a Kanban fork in the drawer and open-source VTTs on the shelf — we still greenfielded DND Cards.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>dnd</category><category>next.js</category><category>supabase</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Relaunching AntiPretty from zero, not WordPress</title><link>https://threesided.com/journal/relaunching-antipretty-from-zero-not-wordpress/</link><guid isPermaLink="true">https://threesided.com/journal/relaunching-antipretty-from-zero-not-wordpress/</guid><description>Fifteen years of galleries on the old stack — we rewrote in two days on Payload instead of theme-hacking forward.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>next.js</category><category>payload</category><category>migration</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Campaign chat that shares the grimoire</title><link>https://threesided.com/journal/campaign-chat-that-shares-the-grimoire/</link><guid isPermaLink="true">https://threesided.com/journal/campaign-chat-that-shares-the-grimoire/</guid><description>We split the table from the board — same Supabase login, auditable rolls, conjures from the deck.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate><category>dnd</category><category>next.js</category><category>supabase</category><category>chat</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>When bots write their own jokes</title><link>https://threesided.com/journal/when-bots-write-their-own-jokes/</link><guid isPermaLink="true">https://threesided.com/journal/when-bots-write-their-own-jokes/</guid><description>Big Black Cards Quiplash mode needed bots that improvise, not just pick from the deck.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><category>games</category><category>react</category><category>openai</category><category>party</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Scrape pipelines should fail loud</title><link>https://threesided.com/journal/scrape-pipelines-should-fail-loud/</link><guid isPermaLink="true">https://threesided.com/journal/scrape-pipelines-should-fail-loud/</guid><description>Vegas Kiddos taught us that a quiet empty scrape is worse than a red build.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>data</category><category>next.js</category><category>airtable</category><category>ops</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Spectator links for party games</title><link>https://threesided.com/journal/spectator-links-for-party-games/</link><guid isPermaLink="true">https://threesided.com/journal/spectator-links-for-party-games/</guid><description>Dungeon Jerks needed a way to watch the tavern without holding the dice.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>games</category><category>svelte</category><category>multiplayer</category><category>ux</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Importing D&amp;D Beyond without a second app</title><link>https://threesided.com/journal/importing-ddb-without-a-second-app/</link><guid isPermaLink="true">https://threesided.com/journal/importing-ddb-without-a-second-app/</guid><description>We wanted characters on the Kanban board, not a parallel sheet product.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><category>dnd</category><category>next.js</category><category>supabase</category><category>pdf</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Card-native VTT on a Kanban board</title><link>https://threesided.com/journal/card-native-vtt-on-a-kanban-board/</link><guid isPermaLink="true">https://threesided.com/journal/card-native-vtt-on-a-kanban-board/</guid><description>We merged a full combat engine into DND Cards without pretending the board was a battle map.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>dnd</category><category>next.js</category><category>supabase</category><category>vtt</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>When CPU bots need to wait for narration</title><link>https://threesided.com/journal/when-cpu-bots-need-to-wait-for-narration/</link><guid isPermaLink="true">https://threesided.com/journal/when-cpu-bots-need-to-wait-for-narration/</guid><description>Async Dungeon Jerks felt broken until bots stopped rolling while the tile was still talking.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>games</category><category>svelte</category><category>ux</category><category>audio</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Desktop gremlins that perch on your title bar</title><link>https://threesided.com/journal/desktop-gremlins-that-perch-on-your-title-bar/</link><guid isPermaLink="true">https://threesided.com/journal/desktop-gremlins-that-perch-on-your-title-bar/</guid><description>Desk Gremlins walks the screen edge in Tauri — perch is a one-time transport, not a second window.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>tauri</category><category>three.js</category><category>desktop</category><category>solidjs</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>MarchingCubes lets you color blobs. The material has to ask.</title><link>https://threesided.com/journal/marchingcubes-vertexcolors-gotcha/</link><guid isPermaLink="true">https://threesided.com/journal/marchingcubes-vertexcolors-gotcha/</guid><description>Six blobs, three colors, all rendered hot pink. The fix is one boolean.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><category>threejs</category><category>webgl</category><category>marching-cubes</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Lighthouse 100s are mostly a font problem</title><link>https://threesided.com/journal/lighthouse-100s-are-mostly-a-font-problem/</link><guid isPermaLink="true">https://threesided.com/journal/lighthouse-100s-are-mostly-a-font-problem/</guid><description>We had 88s and 92s on demo pages. One preload tag took them to 100.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>performance</category><category>fonts</category><category>lighthouse</category><category>cls</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>The Astro CSS scoping gotcha that ate my afternoon</title><link>https://threesided.com/journal/astro-scoping-ate-my-afternoon/</link><guid isPermaLink="true">https://threesided.com/journal/astro-scoping-ate-my-afternoon/</guid><description>Twelve custom view transitions, all looking identical. Took an embarrassing amount of time to spot why.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>css</category><category>view-transitions</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Quote posts deserve real art, not gradients</title><link>https://threesided.com/journal/quote-posts-deserve-real-art-not-gradients/</link><guid isPermaLink="true">https://threesided.com/journal/quote-posts-deserve-real-art-not-gradients/</guid><description>Poetry Obscura v2 replaced flat quote cards with generated illustrations — one image per author, atmospheric, committed.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>poetry</category><category>images</category><category>cms</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>When position:sticky silently dies</title><link>https://threesided.com/journal/when-position-sticky-dies/</link><guid isPermaLink="true">https://threesided.com/journal/when-position-sticky-dies/</guid><description>A scroll-driven 3D scene worked everywhere except where I needed it. The bug was three properties up the tree.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>css</category><category>scroll</category><category>sticky</category><author>hello@threesided.com (Adam Aragon)</author></item><item><title>Migrating a comedy blog off Webflow</title><link>https://threesided.com/journal/migrating-a-comedy-blog-off-webflow/</link><guid isPermaLink="true">https://threesided.com/journal/migrating-a-comedy-blog-off-webflow/</guid><description>FuhNNY relaunched on Astro with the same engineering playbook as Poetry Obscura — different vibe, same Jimp thumbs.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><category>astro</category><category>migration</category><category>content</category><author>hello@threesided.com (Adam Aragon)</author></item></channel></rss>